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就行了