手记

(LeetCode:数据库)部分工资最高的员工

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

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

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

+----+----------+| Id | Name     |
+----+----------+
| 1  | IT       || 2  | Sales    |
+----+----------+

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

+------------+----------+--------+| Department | Employee | Salary |+------------+----------+--------+| IT         | Max      | 90000  || Sales      | Henry    | 80000  |+------------+----------+--------+

Solution 1 :

SELECT
    b. NAME AS department,
    a. NAME AS employee,
    a.salary
FROM
    employee a
JOIN department b ON a.departmentId = b.id
WHERE
    (a.salary, a.departmentId) IN (
        SELECT
            max(salary),
            departmentId
        FROM
            employee
        GROUP BY
            departmentId
    )

该解法,通过分组后,max(salary) 获取最大salary, 最后 通过 salary,departmentId 确定 部门里工资最高的员工。

**Solution 2 **

SELECT
    b.`name` AS department,
    a.`name` AS Employee,
    a.salary
FROM
    (
        SELECT
            NAME,
            salary,
            departmentId
        FROM
            employee
        ORDER BY
            salary DESC
    ) a
LEFT JOIN department b ON a.departmentId = b.id
GROUP BY
    departmentId;

该解法

  1. order by salary desc  作排序,作为临时表

  2. 巧妙的利用group by  分组 获取该分组 工资最高的员工

思考:
如果IT 部门,最高工资90000,有两名同事,这两种解法 如何呢?有什么差异



作者:lconcise
链接:https://www.jianshu.com/p/c564fdba499e


0人推荐
随时随地看视频
慕课网APP