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

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

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

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

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

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

本题存在以下几个麻烦点:
1、按照部门分类查询工资最高的
2、可能存在多个人会有相同的最高工资
3、部门和员工不对应(这点值得吐槽)

  1. SELECT
  2. d.Name AS Department,
  3. e2.Name AS Employee,
  4. e2.Salary AS Salary
  5. FROM
  6. Department d
  7. LEFT JOIN employee e2
  8. ON e2.departmentId = d.id
  9. RIGHT JOIN
  10. (SELECT
  11. e.DepartmentId,
  12. MAX(e.`Salary`) AS salary
  13. FROM
  14. employee e
  15. GROUP BY e.`DepartmentId`) e1 //查询最高薪水
  16. ON e1.Salary = e2.`Salary`
  17. AND e1.DepartmentId = e2.`DepartmentId`
  18. WHERE e2.id IS NOT NULL

版权声明:本文为linux-java原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/linux-java/p/9764946.html