问题185:Employee
表包含所有员工信息,每个员工有其对应的工号Id
,姓名Name
,工资Salary
和部门编号DepartmentId
。
Department
表包含公司所有部门的信息。
编写一个 SQL 查询,找出每个部门获得前三高工资的所有员工。例如,根据上述给定的表,查询结果应返回:
解释:
IT
部门中,Max
获得了最高的工资,Randy
和Joe
都拿到了第二高的工资,Will
的工资排第三。销售部门Sales
只有两名员工,Henry
的工资最高,Sam
的工资排第二。
完整代码:
SELECT tab2.Name AS Department, tab1.Name AS Employee, tab1.Salary AS Salary
FROM Employee AS tab1
INNER JOIN Department AS tab2
ON tab1.DepartmentId = tab2.Id
WHERE (SELECT COUNT(DISTINCT tab3.Salary)
FROM Employee AS tab3
WHERE tab3.DepartmentId = tab1.DepartmentId
AND tab3.Salary > tab1.Salary) < 3
运行结果: