• 【SQL】部门工资最高的员工


    一、题目描述

    表: Employee

    这里是引用
    ±-------------±--------+
    | 列名 | 类型 |
    ±-------------±--------+
    | id | int |
    | name | varchar |
    | salary | int |
    | departmentId | int |
    ±-------------±--------+
    id是此表的主键列。
    departmentId是Department表中ID的外键。
    此表的每一行都表示员工的ID、姓名和工资。它还包含他们所在部门的ID。

    输入:
    Employee 表:
    ±—±------±-------±-------------+
    | id | name | salary | departmentId |
    ±—±------±-------±-------------+
    | 1 | Joe | 70000 | 1 |
    | 2 | Jim | 90000 | 1 |
    | 3 | Henry | 80000 | 2 |
    | 4 | Sam | 60000 | 2 |
    | 5 | Max | 90000 | 1 |
    ±—±------±-------±-------------+
    Department 表:
    ±—±------+
    | id | name |
    ±—±------+
    | 1 | IT |
    | 2 | Sales |
    ±—±------+
    输出:
    ±-----------±---------±-------+
    | Department | Employee | Salary |
    ±-----------±---------±-------+
    | IT | Jim | 90000 |
    | Sales | Henry | 80000 |
    | IT | Max | 90000 |
    ±-----------±---------±-------+
    解释:Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。

    二、代码题解
    # Write your MySQL query statement below
    select
        Department.name as 'Department',
        Employee.name as 'Employee',
        Employee.salary as Salary
    from
        Employee 
            join 
        Department on Employee.departmentId = Department.id
    where 
        (Employee.departmentId , Employee.salary) in
        (   select 
                departmentId,max(salary)
            from 
                Employee
            group by departmentId   
        );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    这样的代码也可以,但是针对薪资同样高的人,名字会不同,但是group by会自动帮我们去重一个,而且这样做也会有问题,因为对departmentId 分的组,但是我们字段却有name,这个name的数量和分组的数量可不一定相同,所以会出bug。

    		select 
                departmentId,name,max(salary)
            from 
                Employee
            group by departmentId 
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    JVM 原理简介
    bcc和ftrace追踪内核网络模块实战
    【面经】阿里数据研发面经
    观察者模式Java示例代码
    mysql 字符串拼接的几种方式
    大数据治理运营整体解决方案:PPT全文39页,附下载
    STM32玩矩阵开关(输入和输出)
    web协议-接口测试-Python自动化面试题
    PY32F003F18之PVD可编程电压检测
    【Linux】基本指令(上)
  • 原文地址:https://blog.csdn.net/weixin_44627672/article/details/126593227