[英]Oracle Aggregate(SUM function) after self-join
我有一個包含 ID、PARENT_ID 和 COUNT 的表。
前任)
+-----+-----------------------+--------------------------+
| ID | PARENT_ID | COUNT |...
+-----+-----------------------+--------------------------+
| 1 | NULL | 40 |...
| 2 | 1 | 10 |...
| 3 | 1 | 20 |...
| 4 | NULL | 35 |...
+-----+-----------------------+--------------------------+
而且,我想要結果是父母和兄弟姐妹的總數。
ID 1 的計數 = ID 1 的計數 + ID 2 的計數 + ID 3 的計數
結果)
+-----+-----------------------+--------------------------+
| ID | PARENT_ID | COUNT |...
+-----+-----------------------+--------------------------+
| 1 | NULL | 70 |...
| 2 | 1 | 10 |...
| 3 | 1 | 20 |...
| 4 | NULL | 35 |...
+-----+-----------------------+--------------------------+
我使用 connect by 來獲得所需的結果,但我想更改方法,因為上述方法使用太多 oracle cpu。
有什么方法可以使用 sum function 來做到這一點?
您可以按如下方式使用自聯接:
SQL> with dataa (ID, PARENT_ID, CNT) as
2 (SELECT 1 , NULL, 40 FROM DUAL UNION ALL
3 SELECT 2 , 1 , 10 FROM DUAL UNION ALL
4 SELECT 3 , 1 , 20 FROM DUAL UNION ALL
5 SELECT 4 , NULL, 35 FROM DUAL)
6 -- your query starts from here
7 SELECT D1.ID, D1.PARENT_ID, D1.CNT + COALESCE(SUM(D2.CNT),0)
8 FROM DATAA D1 LEFT JOIN DATAA D2
9 ON D1.ID = D2.PARENT_ID
10 GROUP BY D1.ID, D1.PARENT_ID, D1.CNT
11 ORDER BY D1.ID;
ID PARENT_ID D1.CNT+COALESCE(SUM(D2.CNT),0)
---------- ---------- ------------------------------
1 70
2 1 10
3 1 20
4 35
SQL>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.