问题

查看SUM Analytic FunctionOracle Base并运行期望 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 BETWEENRANGE BETWEEN 将具有相同键值的所有行视为相同,因此它们都获得“完整”值。

Oracle 文档对此没有很好的解释。 Here是一篇提供一些背景知识的博文。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!