0%

LeetCode: 部门薪水前三名

问题:

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

Employee 表中含有所有的雇员。每个雇员有自己的 id 和 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.

Department 表中含有公司的所有部门。)

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

(写出能够找到每个部门薪水前三名员工的 sql 语句。根据上边的表,你的结果应该包含以下列。)

+————+———-+——–+
| Department | Employee | Salary |
+————+———-+——–+
| IT | Max | 90000 |
| IT | Randy | 85000 |
| IT | Joe | 70000 |
| Sales | Henry | 80000 |
| Sales | Sam | 60000 |
+————+———-+——–+

我的解决方法

SELECT
t2. NAME AS Department,
t1. NAME AS Employee,
t1.Salary AS Salary
FROM
Employee t1,
Department t2
WHERE
t1.DepartmentId = t2.Id
AND (
SELECT
count(distinct(Salary))
FROM
Employee t3
WHERE
t3.DepartmentId = t1.DepartmentId
AND t3.Salary > t1.Salary
) < 3
ORDER BY
Department,
Salary DESC