一天一道Sql题(day04)
185. 部门工资前三高的所有员工 - 力扣(LeetCode)
思路:本题主要考察开窗函数的使用(官方答案未使用开窗,但是我觉得答案可能是在mysql8.0之前写的,当时还没有开窗函数)
先对Employee表增加一列不同部门下薪资的排名(pm),在关联Department查询出结果需要的字段即可。在这里排名时要使用dense_rank() 函数。
排名函数有三个:row_number()、rank()、dense_rank()
row_number(): 严格按照1234排序,相等的数据排名也是不同的
rank(): 1 2 2 4 5 6 6 8
dense_rank():1 2 2 3 4 5 5 6
sql:
with e as (select name,salary,departmentId,dense_rank() over(partition by departmentId order by salary desc) pmfrom Employee
)
select d.name as Department
,e.name as Employee
,e.salary
from e,department d
where e.departmentId=d.id and pm <=3
dense_rank() over(partition by departmentId order by salary desc) pm
会开窗的小伙伴都能看懂,不会的小伙伴建议去学一下开窗~