184.部门工资最高的员工
| 序号 | 题目 | 难度 |
|---|---|---|
| 184 | 题目链接 | 中等 |
题目大意
查找出每个部门中薪资最高的员工。 按 任意顺序 返回结果表。 查询结果格式如下例所示。
表: Employee
| 列名 | 类型 |
|---|---|
| id | int |
| name | varchar |
| salary | int |
| departmentId | int |
在 SQL 中,id是此表的主键。 departmentId 是 Department 表中 id 的外键(在 Pandas 中称为 join key)。 此表的每一行都表示员工的 id、姓名和工资。它还包含他们所在部门的 id。
表: Department
| 列名 | 类型 |
|---|---|
| id | int |
| name | varchar |
在 SQL 中,id 是此表的主键列。 此表的每一行都表示一个部门的 id 及其名称。
示例
输入
Employee 表:
| id | name | salary | departmentId |
|---|---|---|---|
| 1 | Joe | 70000 | 1 |
| 2 | Jim | 90000 | 1 |
| 3 | Henry | 80000 | 2 |
| 4 | Sam | 60000 | 2 |
| 5 | Max | 90000 | 1 |
Department 表:
| id | name |
|---|---|
| 1 | IT |
| 2 | Sales |
输出:
| Department | Employee | Salary |
|---|---|---|
| IT | Jim | 90000 |
| Sales | Henry | 80000 |
| IT | Max | 90000 |
解释:Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。
参考答案
with t1 as(
select
DepartmentId
,max(salary) as max_salary
from employee
group by DepartmentId
)
select
t3.name AS `Department`
,t2.name AS `Employee`
,Salary
from Employee as t2
left join t1
on t2.Salary = t1.max_salary
and t2.DepartmentId = t1.DepartmentId
join Department as t3
on t1.DepartmentId = t3.Id
where t1.DepartmentId is not null
;