LeetCode 数据库面试题 – 部门工资最高的员工

本页内容

Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。

编写一个 SQL 查询,找出每个部门工资最高的员工。例如,根据上述给定的表格,Max 在 IT 部门有最高工资,Henry 在 Sales 部门有最高工资。

IdNameSalaryDepartmentId
1Joe700001
2Henry800002
3Sam600002
4Max900001

Department 表包含公司所有部门的信息。

IdName
1IT
2Sales
DepartmentEmployeeSalary
ITMax90000
SalesHenry80000

解答

  1. 子查询获取每个部门最高的工资。
  2. 再使用 WHERE IN 筛选。
 1SELECT
 2    d.Name as Department,
 3    e.Name as Employee,
 4    e.Salary as Salary
 5FROM
 6    Employee e
 7LEFT JOIN
 8    Department d
 9        ON e.DepartmentId = d.Id
10WHERE (e.DepartmentId, e.Salary) IN (
11    SELECT
12        DepartmentId,
13        MAX(Salary)
14    FROM
15        Employee
16    GROUP BY
17        DepartmentId
18) AND d.Id IS NOT NULL
19ORDER BY e.Id

ORDER BY e.Id 是无关紧要的,只是结果集顺序问题。

原题

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/department-highest-salary