簡體   English   中英

Oracle分析SUM SQL不會在窗口中一次匯總一個

[英]Oracle analytics SUM SQL does not sum one at a time in window

問題

查看Oracle Base中的SUM Analytic Function並運行期望SUM的SQL將一次添加一行薪水。

SELECT 
  deptno,
  ename,
  sal,
  SUM(sal)
    OVER (
      PARTITION BY deptno 
      ORDER BY sal 
      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) 
    AS RUNNING_TOTAL_IN_DEPT
FROM
  emp
ORDER BY deptno, sal
;

但是,對於具有相同工資值的行,將添加具有相同工資值的行的子總計。

DEPTNO  ENAME   SAL     RUNNING_TOTAL_IN_DEPT
20      SMITH   800     800
20      ADAMS   1100    1900
20      JONES   2975    4875
20      SCOTT   3000    10875 <--- Why not 7875? How to make this to 7875?
20      FORD    3000    10875 

30      JAMES   950     950
30      MARTIN  1250    3450 <--- Why not 2200?
30      WARD    1250    3450
30      TURNER  1500    4950
30      ALLEN   1600    6550

請解釋此行為以及如何一次添加一行,即使有多個具有相同工資值的行也是如此。

你使用RANGE BETWEEN而不是ROWS BETWEEN RANGE BETWEEN將具有相同鍵值的所有行視為相同,因此它們都獲得“完整”值。

Oracle文檔沒有很好地解釋這一點。 是一篇博客文章,提供了一些背景知識。

你想要ROWS BETWEEN而不是RANGE BETWEEN

SELECT deptno, ename, sal,
       SUM(sal) OVER (PARTITION BY deptno ORDER BY sal 
                       ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS RUNNING_TOTAL_IN_DEPT
FROM emp
ORDER BY deptno, sal;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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