每日一题-33(查询员工的累计薪水)

题33:

根据下表编写SQL语句,对于每个员工,查询他除最近一个月(即最大月)之外,剩下每个月的近三个月的累计薪水(不足三个月也要计算),结果请按Id升序,然后按Month降序显示。
在这里插入图片描述
解题思路:用sum()over(partition by…order by…rows…)聚合窗口函数。
(1)按照员工ID分组,月份升序,对薪水Salary进行逐月累计求和;
(2)(1)获得的累计薪水还要加上一个限制条件:最近三个月。所以再加上一个子句,取当前月和前两个月的薪水累计,即可得到每个员工每个月最近三个月的累计薪水;
(3)筛选条件是月份不在最大月(也就是当前月);
(4)最后按照ID升序,Month降序排序即可。

select id, month, sum(salary) over (partition by id order by month range 2 preceding) as Salary 
from employee
where (id,month) not in (select id,max(month) from Employee group by id)--排除最大月
order by id, month desc;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值