MYSQL | 求各个部门里薪水最高的员工(可能有多个员工)

题目

有两张表Employee和Department,要求如题

  • 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 |
±—±---------+

  • ⚠️多个员工薪水都是最高,都需要输出

使用JOIN和IN从句

  • 分组自然想到GROUP BY
SELECT
    DepartmentId, MAX(Salary)
FROM
    Employee
GROUP BY DepartmentId;

可能多个员工薪水都最高,但是这里只会输出一个员工
| DepartmentId | MAX(Salary) |
|--------------|-------------|
| 1 | 90000 |
| 2 | 80000 |

  • 解法:join两个table,然后查询(DepartmentId, Salary)在temp table中
SELECT
    Department.name AS Department,
    Employee.name AS Employee,
    Salary
FROM
    Employee JOIN Department ON Employee.DepartmentId = Department.Id
WHERE
    (Employee.DepartmentId, Salary) IN
    (SELECT DepartmentId, MAX(Salary) FROM Employee GROUP BY DepartmentId)

你可能感兴趣的:(编程范式)