力扣579(MySQL)-查询员工的累积薪水(困难)
题目:
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;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)