部门工资最高的员工
Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。
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 |
编写一个 SQL 查询,找出每个部门工资最高的员工。对于上述表,您的 SQL 查询应返回以下行(行的顺序无关紧要)。
Department | Employee | Salary |
---|---|---|
IT | Max | 90000 |
IT | Jim | 90000 |
Sales | Henry | 80000 |
解释:
Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/department-highest-salary
思路
1. 首先分组查询每个部门最高工资,用id和department字段作为进一步查询的关键键对;
2. 根据键对,查询出每个部门最高工资员工的信息;
3. 内连接查询出具体的部门信息即可;
代码
select d.Name as'Department',e.Name as'Employee',e.Salary
from Department as d
inner join
(
select Employee.*
from Employee
where (Salary,DepartmentId) in(
select max(Salary), DepartmentId
from Employee
group by DepartmentId)
)as e
on e.DepartmentId = d. Id;