表内自连接,得到rank前三的记录
https://leetcode.com/problems/department-top-three-salaries/
第一种:
SELECT D.Name AS Department,A.Employee,A.Salary FROM
(SELECT C.DepartmentId,C.Name AS Employee,C.Salary FROM
(SELECT E1.id,E1.Name,E1.Salary,E1.DepartmentId,COUNT(1) AS RANK FROM Employee E1
INNER JOIN
(SELECT DISTINCT Salary,DepartmentId FROM Employee) E2
ON E1.DepartmentId=E2.DepartmentId AND E1.Salary<=E2.Salary
GROUP BY E1.id,E1.Name,E1.Salary,E1.DepartmentId) C WHERE C.RANK<4) A
INNER JOIN Department D ON D.Id=A.DepartmentId
第二种:
select d1.name as Department,
e1.name as Employee,
e1.salary as Salary
from Department d1, Employee e1
where (
select count(distinct e2.salary)
from Employee e2
where e2.salary > e1.salary and e2.departmentid = e1.departmentid
) < 3 and d1.id = e1.departmentid;