为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
MySQL

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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消