LeetCode Database 184 部门工资最高的员工

1. 题目描述

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

1
2
3
4
5
6
7
8
+----+-------+--------+--------------+
| Id | Name | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1 | Joe | 70000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Max | 90000 | 1 |
+----+-------+--------+--------------+

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

1
2
3
4
5
6
+----+----------+
| Id | Name |
+----+----------+
| 1 | IT |
| 2 | Sales |
+----+----------+

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

1
2
3
4
5
6
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT | Max | 90000 |
| Sales | Henry | 80000 |
+------------+----------+--------+

2. 题解

2.1. MySQL(MAX子查询)

子查询,找到当前员工所在部门的最高工资,如果当前员工的工资就是最高工资,则输出

1
2
3
4
5
6
7
SELECT tb2.Name AS Department, tb1.Name AS Employee, tb1.Salary
FROM Employee tb1
JOIN Department tb2 ON tb1.DepartmentId = tb2.Id
WHERE tb1.Salary = (
-- 找出当前DepartmentId下,最高的工资
SELECT MAX(Salary) FROM Employee tb3
WHERE tb1.DepartmentId = tb3.DepartmentId)

2.2. MySQL(GROUP BY MAX)

1
2
3
4
5
6
SELECT tb2.Name AS Department, tb1.Name AS Employee, tb1.Salary
FROM Employee tb1
JOIN Department tb2 ON tb1.DepartmentId = tb2.Id
WHERE (tb1.DepartmentId, tb1.Salary) IN (
SELECT DepartmentId, MAX(Salary) FROM Employee
GROUP BY DepartmentId)
panchaoxin wechat
关注我的公众号
支持一下