with t as (
select id, name as 'Employee', Salary, DepartmentId, dense_rank() over(partition by DepartmentId order by salary desc) as 'rank'
from employee
)
select d.name as 'Department',t.Employee, t.Salary
from t
left join Department as d on t.DepartmentId = d.id
where t.rank <= 3
partition by,按某字段切分,例如partition by 班级,就是每个班级独自排名
order by,与常规order by用法一致,也区分ASC(默认)和DESC,因为排名总得有个依据
如果会用函数的话,这题其实很简单,先算个rank,然后过滤一下rank<=3就行了

本文介绍了如何使用SQL查询对员工薪水进行排名,并通过dense_rank函数按部门划分,筛选出每个部门内的前三个薪酬最高者。展示了如何结合partition by和order by来实现这一操作。
742

被折叠的 条评论
为什么被折叠?



