Oracle中的累积计算

问题描述

我在Emp下面有一个包含三列(empno,ename,salary)的表。

empno  ename   salary 
---------------------
 101   Ram     2000
 102   Kumar   1000
 103   Mani    3000

我需要通过在上表中显示Cumulative_Salary来在下面的输出

Empno Ename  Cumulative_Salary
-------------------------------
101   Ram    2000
102   Kumar  3000
103   Mani   6000

解决方法

您正在寻找SUM OVER

select 
  empno,ename,salary,sum(salary) over(order by empno) as cumulative_salary
from emp
order by empno;

通过在ORDER BY empno子句中应用OVER,我们可以隐式应用RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW,但是如果您愿意的话,您当然可以使其明确。

文档:cronguru

,
    select 
      empno,sum(salary) as cumulative_salary
    from emp
    group by
      empno,ename
    order by empno;