每日一题-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;

猜你喜欢

转载自blog.csdn.net/Txixi/article/details/121749147