簡體   English   中英

Oracle 自加入后的聚合(SUM 函數)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM