zoukankan      html  css  js  c++  java
  • 185. Department Top Three Salaries (Hard)

    Description:

    The Employee table holds all employees. Every employee has an Id, and there is also a column for the department Id.

    +----+-------+--------+--------------+
    | Id | Name | Salary | DepartmentId |
    +----+-------+--------+--------------+
    | 1 | Joe | 70000 | 1 |
    | 2 | Henry | 80000 | 2 |
    | 3 | Sam | 60000 | 2 |
    | 4 | Max | 90000 | 1 |
    | 5 | Janet | 69000 | 1 |
    | 6 | Randy | 85000 | 1 |
    +----+-------+--------+--------------+

    The Department table holds all departments of the company.

    +----+----------+
    | Id | Name |
    +----+----------+
    | 1 | IT |
    | 2 | Sales |
    +----+----------+

    Write a SQL query to find employees who earn the top three salaries in each of the department. For the above tables, your SQL query should return the following rows.

    +------------+----------+--------+
    | Department | Employee | Salary |
    +------------+----------+--------+
    | IT | Max | 90000 |
    | IT | Randy | 85000 |
    | IT | Joe | 70000 |
    | Sales | Henry | 80000 |
    | Sales | Sam | 60000 |
    +------------+----------+--------+
    Solution:
    select t2.name  as Department, t1.Employee , t1.salary from 
    (
        select e1.id, e1.name as employee, e1.salary, e1.departmentid from Employee  e1
        inner join  Employee e2
        on e1.departmentid = e2.departmentid
        and e1.salary<=e2.salary
        group by e1.id
        having count(distinct(e2.salary))<=3
    )
    t1
    inner join
    (select * from Department )t2
    on t1.DepartmentId  = t2.id 
  • 相关阅读:
    重识linux-常见压缩和解压缩命令
    重识linux-压缩文件的原理
    重识linux-关于selinux
    重识linux-循环执行的例行性工作调度
    重识linux-仅执行一次的工作调动at
    Python资源
    python hehe
    Chrome 消息机制
    自己动手写reg注册表文件
    用JavaScript截图
  • 原文地址:https://www.cnblogs.com/sixu/p/6884906.html
Copyright © 2011-2022 走看看