Oracle分析SUM SQL不会在窗口中一次汇总一个

mon*_*mon 2 sql oracle analytics

问题

纵观SUM解析函数甲骨文基地和运行SQL期待SUM将一次添加工资一行.

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
;
Run Code Online (Sandbox Code Playgroud)

但是,对于具有相同工资值的行,将添加具有相同工资值的行的子总计.

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
Run Code Online (Sandbox Code Playgroud)

请解释此行为以及如何一次添加一行,即使有多个具有相同工资值的行也是如此.

Gor*_*off 5

你正在使用RANGE BETWEEN而不是ROWS BETWEEN. RANGE BETWEEN处理具有相同键值的所有行,因此它们都获得"完整"值.

Oracle文档没有很好地解释这一点. 是一篇博客文章,提供了一些背景知识.