题目内容:
表: 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的数据量会大一些。
通过使用SQL的窗口函数rank(),配合子查询和JOIN操作,从Employee和Department表中检索每个部门薪资最高的员工信息。这种方法首先在每个部门内对薪资进行降序排名,然后选择排名第一的记录,从而得到每个部门的最高薪资员工。
261

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



