Leetcode - 185. 部门工资前三高的所有员工
解题思路参考代码中的注释:
# Write your MySQL query statement below # 本题需要使用到第180题(https://leetcode-cn.com/problems/consecutive-numbers/)的解题思路 # 首先,对Employee表根据DepartmentId升序、Salary降序进行排序 # 然后就可以用第180题的方法给同一个部门的工资进行排名,并取出各个部门前三名的工资 # 最后再与Department表进行连接查询即可 # 5. 将排好名的员工表与部门表进行连接查询,并筛选出排在前三名的记录 SELECT dep.Name Department, ranked.Name Employee, ranked.Salary Salary FROM ( # 3. 用第180题的方法给同一个部门的工资进行排名 SELECT Name, DepartmentId, Salary, # 4.1. 如果部门名称和上一个部门名称不同,则工资排名为1 # 4.2. 如果部门名称和上一个部门名称相同,则看工资是否相同,相同则工资排名仍为cnt,否则为cnt+1 @cnt:=IF(@preD=DepartmentId, IF(@preS=Salary, @cnt, @cnt+1), 1) cnt, @preD:=DepartmentId preD, @preS:=Salary preS FROM # 1. 对Employee表根据DepartmentId升序、Salary降序进行排序 (SELECT * FROM Employee ORDER BY DepartmentId, Salary DESC) sorted, # 2. 为了给工资进行排名,需要额外定义这三个变量,它们分别表示上一个部门名称、上一个工资、工资排名 (SELECT @preD:=null, @preS:=null, @cnt:=0) vars ) ranked, Department dep WHERE ranked.DepartmentId = dep.Id AND cnt <= 3;
查看26道真题和解析