牛客SQL练习第60题

题目描述

按照salary的累计和running_total,其中running_total为前N个当前( to_date = ‘9999-01-01’)员工的salary累计和,其他以此类推。 具体结果如下Demo展示。。

CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

输出格式:

emp_nosalaryrunning_total
100018895888958
1000272527161485
1000343311204796
1000474057278853
1000594692373545
1000643311416856
1000788070504926
1000995409600335
1001094409694744
1001125828720572

解答

由题和表可以得知 running_total 就是小于等于自己的emp_no的salary的和

select 
	s1.emp_no,
	s1.salary,
    (select 
    	sum(s2.salary)  
    from salaries s2 
    where s2.emp_no<=s1.emp_no 
    and s2.to_date='9999-01-01') running_total
from salaries s1
where s1.to_date='9999-01-01'
order by s1.emp_no

-- 

还可以用窗口函数解决:
关于窗口函数的简单解释可以看这里

select 
	emp_no,
	salary,
	sum(salary) over(order by emp_no) as running_total
from salaries 
where  to_date='9999-01-01'
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值