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 筛选。
SELECT
    d.Name as Department,
    e.Name as Employee,
    e.Salary as Salary
FROM
    Employee e
LEFT JOIN
    Department d
        ON e.DepartmentId = d.Id
WHERE (e.DepartmentId, e.Salary) IN (
    SELECT
        DepartmentId,
        MAX(Salary)
    FROM
        Employee
    GROUP BY
        DepartmentId
) AND d.Id IS NOT NULL
ORDER BY e.Id

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

原题

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