在Oracle窗口函数中求和

use*_*513 3 sql oracle window-functions

任何人都可以在下面的代码片段中告诉我在oracle分区中的sum内部有什么意义sum (SUM(SUM(VAL)))

SELECT NMS,
       SUM(SUM(VAL)) OVER(PARTITION BY NMS),  ---- SIGNIFICANCE
       EMPNO,
       SUM(SUM(VAL)) OVER(PARTITION BY EMPNO)   ---- SIGNIFICANCE
  FROM PART_TEST_PART
 GROUP BY NMS, EMPNO;
Run Code Online (Sandbox Code Playgroud)

Daz*_*zaL 6

它计算VAL每个NMS(对于第一个)和EMPNO(对于第二个)的总和.

首先评估组+ SUM(VAL),然后分析计算该结果.

例如,如果你在小组之后得到了结果

EMPNO  NMS SUM(VAL)
1      a   15
1      b   24
2      a   50
Run Code Online (Sandbox Code Playgroud)

你必须SUM(SUM(VAL)) OVER(PARTITION BY NMS)

EMPNO  NMS SUM(VAL) SUM(SUM(VAL)) OVER(PARTITION BY NMS)
1      a   15       65  (15+50 for NMS = a)
1      b   24       24  (24 for NMS = b)
2      a   50       65  (15+50 for NMS = a)
Run Code Online (Sandbox Code Playgroud)

你必须SUM(SUM(VAL)) OVER(PARTITION BY EMPNO)

EMPNO  NMS SUM(VAL) SUM(SUM(VAL)) OVER(PARTITION BY EMPNO)
1      a   15       39  (15+24 for EMPNO = 1)
1      b   24       39  (15+24 for EMPNO = 1)
2      a   50       50  (50 for EMPNO = 2)
Run Code Online (Sandbox Code Playgroud)