LeetCode: 部门薪水前三名

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


创建于2017年03月22日 20:11
阅读量 627
留言列表

暂时没有留言

添加留言