zoukankan      html  css  js  c++  java
  • Q200510-01: 求部门工资最高的员工

    问题: 求部门工资最高的员工

    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  |

    +------------+----------+--------+

    解答:

    mysql> select d.name as department,b.name as employee,b.salary from (select e.* from employee e inner join
        -> (select max(salary) as max_salary,departmentid from employee group by departmentid) a
        -> on e.salary=a.max_salary and e.departmentid=a.departmentid) b left join department d
        -> on b.departmentid=d.id ;
    +------------+----------+--------+
    | department | employee | salary |
    +------------+----------+--------+
    | Sales      | Henry    |  80000 |
    | IT         | Max      |  90000 |
    +------------+----------+--------+
    2 rows in set (0.00 sec)

    过程:

    create table employee(
        id int,
        name varchar(20) not null,
        salary int,
        departmentid int not null,
        primary key(id))
        
    insert into employee(id,name,salary,departmentid) values ('1','Joe','70000','1');
    insert into employee(id,name,salary,departmentid) values ('2','Henry','80000','2');
    insert into employee(id,name,salary,departmentid) values ('3','Sam','60000','2');
    insert into employee(id,name,salary,departmentid) values ('4','Max','90000','1');
        
    create table department(
        id int,
        name varchar(20) not null,
        primary key(id))
        
    insert into department(id,name) values('1','IT');
    insert into department(id,name) values('2','Sales');
    
    select max(salary) as max_salary,departmentid from employee group by departmentid
    
    select e.* from employee e inner join 
    (select max(salary) as max_salary,departmentid from employee group by departmentid) a
    on e.salary=a.max_salary and e.departmentid=a.departmentid
    
    select b.id,b.name,b.salary,d.name from (select e.* from employee e inner join 
    (select max(salary) as max_salary,departmentid from employee group by departmentid) a
    on e.salary=a.max_salary and e.departmentid=a.departmentid) b left join department d
    on b.departmentid=d.id 
    
    select d.name as department,b.name as employee,b.salary from (select e.* from employee e inner join 
    (select max(salary) as max_salary,departmentid from employee group by departmentid) a
    on e.salary=a.max_salary and e.departmentid=a.departmentid) b left join department d
    on b.departmentid=d.id 

    --2020年5月10日 17点22分--

    1.       部门工资最高的员工

    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  |

    +------------+----------+--------+

  • 相关阅读:
    可遇不可求的Question之过滤单词字符的正则表达式\w的疑义
    可遇不可求的Question之DBNull.Value.ToString()
    可遇不可求的Question之MYSQL的10060和10061错误篇
    可遇不可求的Question之正在中止线程异常
    可遇不可求的Question之类型初始值设定项引发异常篇
    可遇不可求的Question之调用的目标发生了异常篇
    可遇不可求的Question之要复制的 LOB 数据的长度超出了配置的最大值篇
    熱海へ
    CC的留言
    研发才是硬道理钢铁侠的评论(摘自豆瓣)
  • 原文地址:https://www.cnblogs.com/heyang78/p/12864230.html
Copyright © 2011-2022 走看看