力扣数据库:部门工资最高的员工
发布日期:2021-05-13 22:15:56 浏览次数:16 分类:精选文章

本文共 993 字,大约阅读时间需要 3 分钟。

思路

  • 按部门分组查询最大工资:使用 GROUP BY DepartmentId 按照每个部门的 Id 进行分组。在每个组内使用 MAX(Salary) 找到最高的工资。这一步可以确保我们仅保留每个部门中工资最高的员工信息。

  • 保留所有最高工资的员工信息:在 GROUP BY 中使用 HAVING 子句来进行过滤。如果有多个员工在同一部门的工资是最高的,这一步可以确保所有这些员工的信息都会被保留。

  • 连接到部门表:使用 LEFT JOIN 确保所有部门即使在没有员工的情况下也会显示在结果中。连接到 Department 表,可以获取部门的名称。

  • 代码

    SELECT d.Name AS Department, e.Name AS Employee, e.SalaryFROM Department AS dLEFT JOIN (    SELECT e.*, MAX(Salary) AS MaxSalary    FROM Employee AS e    GROUP BY e.DepartmentId    HAVING MaxSalary = e.Salary) AS e_selected ON d.Id = e.DepartmentId

    解释

    • SELECT d.Name AS Department, e.Name AS Employee, e.Salary:从部门表 d 中获取部门名称,并从 e_selected 中获取员工名称及其最终确认到的最高工资。

    • LEFT JOIN:确保即使某部门没有员工,结果中仍然会显示该部门。

    • 子查询SELECT e.*, MAX(Salary) AS MaxSalary FROM Employee AS e GROUP BY e.DepartmentId HAVING MaxSalary = e.Salary

      • GROUP BY e.DepartmentId:按部门 Id 分组。
      • MAX(Salary):在组内找出最高的工资。
      • HAVING MaxSalary = e.Salary:只保留那些刚好等于组内最高工资的员工信息。如果有多个员工在同一部门的工资相同,这些员工都会被保留。

    用这种方法可以既高效又清晰地得到每个部门的工资最高员工信息。无论是单一部门的最高工资员工,还是多个员工的最高工资信息,都可以通过这一查询轻松获取。

    上一篇:MySQL复习day08:流程控制结构
    下一篇:力扣数据库:删除重复的电子邮箱

    发表评论

    最新留言

    初次前来,多多关照!
    [***.217.46.12]2025年05月03日 07时43分42秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章