• LeetCode 185 部门工资前三高的所有员工


    表: Employee

    +--------------+---------+
    | Column Name  | Type    |
    +--------------+---------+
    | id           | int     |
    | name         | varchar |
    | salary       | int     |
    | departmentId | int     |
    +--------------+---------+
    Id是该表的主键列。
    departmentId是Department表中ID的外键。
    该表的每一行都表示员工的ID、姓名和工资。它还包含了他们部门的ID。
     

    表: Department

    +-------------+---------+
    | Column Name | Type    |
    +-------------+---------+
    | id          | int     |
    | name        | varchar |
    +-------------+---------+
    Id是该表的主键列。
    该表的每一行表示部门ID和部门名。
     

    公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。

    编写一个SQL查询,找出每个部门中 收入高的员工 。

    以 任意顺序 返回结果表。

    查询结果格式如下所示。

    示例 1:

    输入: 
    Employee 表:
    +----+-------+--------+--------------+
    | id | name  | salary | departmentId |
    +----+-------+--------+--------------+
    | 1  | Joe   | 85000  | 1            |
    | 2  | Henry | 80000  | 2            |
    | 3  | Sam   | 60000  | 2            |
    | 4  | Max   | 90000  | 1            |
    | 5  | Janet | 69000  | 1            |
    | 6  | Randy | 85000  | 1            |
    | 7  | Will  | 70000  | 1            |
    +----+-------+--------+--------------+
    Department  表:
    +----+-------+
    | id | name  |
    +----+-------+
    | 1  | IT    |
    | 2  | Sales |
    +----+-------+
    输出: 
    +------------+----------+--------+
    | Department | Employee | Salary |
    +------------+----------+--------+
    | IT         | Max      | 90000  |
    | IT         | Joe      | 85000  |
    | IT         | Randy    | 85000  |
    | IT         | Will     | 70000  |
    | Sales      | Henry    | 80000  |
    | Sales      | Sam      | 60000  |
    +------------+----------+--------+
    解释:
    在IT部门:
    - Max的工资最高
    - 兰迪和乔都赚取第二高的独特的薪水
    - 威尔的薪水是第三高的

    在销售部:
    - 亨利的工资最高
    - 山姆的薪水第二高
    - 没有第三高的工资,因为只有两名员工

    解题思路:

    窗口函数

    力扣

    SQL代码:

    1. # Write your MySQL query statement below
    2. select b.name as Department, a.name as Employee, a.salary as Salary
    3. from (
    4. select DENSE_RANK() OVER (partition by DepartmentId order by Salary desc) AS ranking , name, salary, departmentId
    5. from Employee
    6. ) a
    7. left join Department b
    8. on a.departmentId = b.id
    9. where a.ranking <= 3

  • 相关阅读:
    LabVIEW将视觉生成器AI用作OPC服务器
    Go整合Logrus实现日志打印
    MySQL修改表字段名
    OpenCV(三十):图像膨胀
    【算法】计算组合数的四种常用方法
    用了这跨操作系统远控软件,我再也不出差了
    生成对抗网络(GAN)
    Spring——@Autowired注解以及与@Resource区别
    Django之视图
    大带宽服务器租用适用于哪些场景?
  • 原文地址:https://blog.csdn.net/weixin_42295205/article/details/125631233