给定了一张工资表,我们需要编写一个查询来打印员工的累计工资。例如:
Emp Sal
A 10
B 15
C 20
D 5
OutPut:
Emp Sal Cum_Sal
A 10 10
B 15 25
C 20 45
D 5 50
在某些 RDBMS(如 PostgreSQL 或 SQL Server 2012 或 Oracle)中,可以使用窗口函数:
select
Emp, Sal, sum(Sal) over(order by Emp) as Cum_Sal
from employees
如果不可能,您可以使用自加入
select
e1.Emp, e1.Sal, sum(e2.Sal) as Cum_Sal
from employees e1
inner join employees e2 on e2.Emp <= e1.Emp
group by e1.Emp, e1.Sal
请注意,在这两种情况下,您都必须定义滚动总和的顺序(在上面的查询中,它是按Emp
列排序的)。
对于 MS SQL,请尝试以下操作:
select NAME,SAL,sum(SAL)
over(order by SAL rows between unbounded preceding and current row) as cum_sal
from employee
select e.name,e.joining,sum(e_1.increment) from employee e inner join employee e_1 on e.name=e_1.name where e.joining>=e_1.joining group by e.name,e.joining
表如下所示,您可以使用相同的方法