Write a SQL query to find out the high wages in the first three employees of each department

Employee table contains information on all employees, each has its corresponding employee Id, salary and department Id.

---- + -------- + ------- + + -------------- +
| Id | the Name | the 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 |
+ ----- + ---- - + -------------- + -------- +
department table contains information about all sectors of the company.

+ ---------- + ---- +
| Id | the Name |
+ ---- + ---------- +
| 1 | IT |
| 2 | Sales |
+ ---- + ---------- +
write a SQL query to find the top three high-wage employees of each department. For example, given the above table, the query results should be returned:

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

Sql如下:
SELECT
d.Name Department,e1.Name Employee,e1.Salary Salary
FROM
Employee e1,
Employee e2 ,
Department d
WHERE
e1.DepartmentId = e2.DepartmentId
AND e1.Salary <= e2.Salary
and e1.DepartmentId=d.Id
group by e1.id
having count(DISTINCT e2.Salary)<=3
order by d.Name,e1.Salary desc

Guess you like

Origin blog.csdn.net/weixin_34062469/article/details/90921140