У меня возникли проблемы с суммированием некоторого столбца в моем запросе с агрегацией. Немного сложно описать, что происходит, но я постараюсь изо всех сил:
У меня есть 3 стола - подробности, дополнительные детали и места. Места - это таблица, в которой есть места в мире. Подробности содержат сведения о произошедших событиях, а дополнительные сведения предоставляют дополнительные данные о событиях.
Каждое место имеет ID
и ParentID
(Как Нью-Йорк имеет ID
и является его родителем ID
является US
. Что-то в этом роде). ID
события (подробности) появляется несколько раз в виде столбца в таблице дополнительных данных. В таблице дополнительных данных также содержится ID
того места, где произошло это событие.
ОК после всего того, чего я пытаюсь достичь, для каждого места сумма событий, которые там были. Я знаю, это звучит очень специфично, но это то, что клиент спросил.
Во всяком случае, пример того, к чему я пытаюсь добраться: NewYork 60, Chicago 20, Houston 10 Тогда у США будет 90. И он имеет несколько уровней.
Так что это то, что я пытаюсь сделать:
Сумма агрегирования в SQL (присоединяется)
With C(ID, NAME, COUNTT, ROOT_ID) as
(
SELECT d.ID, d.NAME,
(SELECT COUNT(LX.ID) as COUNTT
FROM EXTRA LX
RIGHT JOIN d ON LX.PLACE_ID = d.ID -- ****
GROUP BY d.ID, d.NAME),
d.ID as ROOT_ID
FROM PLACES d
UNION ALL
SELECT d.ID, d.NAME,
(SELECT COUNT(LX.ID) as COUNTT
FROM EXTRA LX
RIGHT JOIN d ON LX.PLACE_ID = d.ID
GROUP BY d.ID, d.NAME),
C.ROOT_ID
FROM PLACES dx
INNER JOIN C ON dx.PARENT_ID = C.ID
)
SELECT p.ID, p.NAME, S.SumIncludingChildren
FROM places p
INNER JOIN (
SELECT ROOT_ID, SUM(COUNTT) as SumIncludingChildren
FROM C
GROUP BY ROOT_ID
) S
ON p.ID = S.ROOT_ID
ORDER BY p.ID;
деталей таблицы только для показа своих данных. Я добавлю это позже. Это только сравнение соответствующих столбцов. Чтобы это работало, мне это не нужно. Только для данных сайта.
Это не работает, потому что он не распознает «d», где находится «****». Если я положу «новый экземпляр» этой таблицы, это тоже не сработает. Поэтому я попытался реплицировать то, что нужно сделать, сделав 'NOT EXISTS IN'
по запросу, который получает все места вместо правильного соединения ... on. Та же проблема.
Может быть, я чего-то не понимаю. Но я действительно ищу решение и какое-то объяснение. Я знаю, что мой код не идеален. Спасибо заранее.
EDIT: Я использую OracleSQL на Жаба 10.6
Может быть, вы могли бы добавить DESC ваших таблиц? – sers