题目内容:
表: Employee
表: Department
编写SQL查询以查找每个部门中薪资最高的员工。
按 任意顺序 返回结果表。
查询结果格式如下例所示。
示例 1:
我的思路:
看到题目内容,求每个部门中薪资最高的员工,很明显是分组TopN的问题,开窗+rank即可。代码如下:
select
t3.name Department,
t2.name Employee,
t2.salary Salary
from
(
select
name,
salary,
departmentId
from
(
select
name,
salary,
departmentId,
rank() over(partition by departmentId order by salary desc) rk
from Employee
)t1
where t1.rk=1
)t2
join
(
select
id,
name
from Department
)t3
on t2.departmentId=t3.id
我这里是先根据部门id求出每个部门最高工资的一条数据(如果有并列的话是多条数据),然后再跟部门表外连接获得部门名称。
也可以先全外连接然后再分组topN,只不过先全外连接可能join的数据量会大一些。