当前位置:   article > 正文

Leetcode_579. 查询员工的累计薪水_79. 查询员工的累计薪水 困难 相关标签 相关

79. 查询员工的累计薪水 困难 相关标签 相关
题目难度

困难

题目描述

Employee 表保存了一年内的薪水信息。
请你编写 SQL 语句,来查询每个员工每个月最近三个月累计薪水(不包括当前统计月,不足三个月也要计算)。
结果请按 ‘Id’ 升序,然后按 ‘Month’ 降序显示。

在这里插入图片描述

正确答案
SELECT E1.Id,E1.Month,SUM(E2.Salary) as Salary
FROM  Employee E1,Employee E2
WHERE E1.Id = E2.Id
	AND E1.Month >= E2.Month  # 防止取到比当前月大的月份
	AND E1.Month < E2.Month+3  # E1的月份比E2的大,但不大于3 妙
	AND (E1.Id,E1.Month) NOT IN (SELECT Id, MAX(Month) FROM Employee GROUP BY Id) #去掉本月的统计结果
GROUP BY E1.Id,E1.Month
ORDER BY E1.Id ASC, E1.Month DESC
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
思路不简练的答案
SELECT Id,Month,Salary
FROM    
	(SELECT E1.Id,E1.Month,SUM(E2.Salary) AS Salary    
	FROM Employee E1,Employee E2    
	WHERE E1.Id=E2.Id 
		AND E1.Month <= E2.Month+2 
		AND E1.Month >= E2.Month    
	GROUP BY E1.Id,E1.Month) tmp
WHERE (Id,Month) NOT IN  (SELECT Id,MAX(Month) FROM Employee  GROUP BY Id) 
ORDER BY Id ASC,Month DESC
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

外层的where筛选明明可以放进内层,却嵌套了外层结构,造成冗余与运行压力,能不用子查询就不用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/950243
推荐阅读
相关标签
  

闽ICP备14008679号