我在汇总中对查询中的某些列进行求和时遇到了一些麻烦。 描述发生了什么有点困难,但我会尽我所能:
我有3个表 - 细节,额外的细节和地方。 地方是一张表,包含世界上的地方。详细信息包含有关发生的事件的详细信息,额外的详细信息提供了有关事件的更多数据
每个地方有一个ID
和一个ParentID
(像纽约有一个ID
,它的父母ID
是US
。类似的东西)。事件(详细信息)的ID
作为额外详细信息表中的列出现多次。额外的详细信息表格还包含该事件发生地点的ID
。
好了毕竟,我试图实现的是,对于每个地方,发生在那里的事件的总和。我知道这听起来很具体,但这是客户要求的。
无论如何,我试图去的例子: 纽约60,芝加哥20,休斯顿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'
查询获取所有的地方,而不是正确的加入...上。同样的问题。
也许我没有得到什么。但我真的在寻求解决方案和一些解释。我知道我的代码并不完美。 在此先感谢。
编辑:我使用的是蟾蜍10.6
OracleSQL也许你可以添加表的说明? – sers