题目:
Employee 表保存了一年内的薪水信息。
请你编写 SQL 语句,对于每个员工,查询他除最近一个月(即最大月)之外,剩下每个月的近三个月的累计薪水(不足三个月也要计算)。
结果请按 Id 升序,然后按 Month 降序显示。
输出:
解题思路:
三个月内:假如当前月是4月,那么三个月的累积就是 4月工资 + 3月工资 + 2月工资。
以上怎么算出来的?
id 为1 的员工工资分布月为1,2,3,4月,题目要求排除最大月,那就是1,2,3月,sum(第三行) = 第三行+第二行 +第一行 = 40+30+20 = 90,sum(第二行)=第二行+第一行 = 30+20 = 50,sum(第一行) = 20。
①先将表按id分组,再按Month进行降序排序,并增加一列序数值;
1 SELECT 2 Id, 3 Month, 4 Salary, 5 DENSE_RANK() over ( PARTITION BY Id ORDER BY Month DESC ) 6 AS rnk 7 FROM employee_579
②筛选掉序数最高的,然后对工资进行求和,最终按id升序,当id一样的时候按Month降序排序。
1 SELECT 2 temp.Id, 3 temp.Month, 4 sum( temp.Salary ) over ( PARTITION BY temp.Id ORDER BY temp.Month ) AS salary 5 FROM 6 ( SELECT Id, Month, Salary, DENSE_RANK() over ( PARTITION BY Id ORDER BY Month DESC ) AS rnk FROM employee_579 ) AS temp 7 WHERE 8 temp.rnk > 1 9 ORDER BY 10 temp.Id, 11 temp.Month DESC;标签:579,temp,sum,Month,力扣,MySQL,ORDER,Id From: https://www.cnblogs.com/liu-myu/p/17264421.html