zoukankan      html  css  js  c++  java
  • sql 184. 部门工资最高的员工

    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 |
    +------------+----------+--------+

    select 
        d.Name as Department,
        e.Name as Employee,
        e.Salary 
    from 
        Employee e,Department d 
    where
        e.DepartmentId=d.id 
        and
        (e.Salary , e.DepartmentId) in (select max(Salary),DepartmentId from Employee group by DepartmentId);

    此次学到的用法为把查询到的结果当做另一次查询的条件

    另一个答案为

    select 
    t.Name as Department,
    e.Name as Employee, 
    e.Salary as Salary
    from(
        select DepartmentId, 
            d.name as Name ,
            max(Salary) as Salary from Employee  e
        join Department d on d.Id = e.DepartmentId 
        group by DepartmentId) as t
    join Employee e
    on t.DepartmentId = e.DepartmentId and e.Salary = t.Salary

    由此答案可得出select后的结果可给别的select当源,但个数必须匹配

  • 相关阅读:
    python2和python3的区别
    星球大战
    [USACO]高低卡(金)High Card Low Card (Gold)
    学习笔记
    叶子的染色
    大问题
    ...
    考试前...
    [HAOI2010]计数
    [POI2006]OKR-Periods of Words
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/11079105.html
Copyright © 2011-2022 走看看