假设我有两个表(如下)。编写选择以获取每个部门薪水最高的 2 名员工的最佳方法是什么?假设可能有很多部门。
输出:
employee_name | salary | department_id
John | 65000 | 1
Sally | 60000 | 1
Lucy | 40000 | 2
James | 80000 | 3
Harry | 65000 | 3
表格:
员工
employee_name | salary | department_id
John | 65000 | 1
Sally | 60000 | 1
Connor | 55000 | 1
Judy | 55000 | 1
Lucy | 40000 | 2
James | 80000 | 3
Harry | 65000 | 3
Penny | 56000 | 3
部门
department_id | name
1 | Sales
2 | Marketing
3 | IT
最佳答案
此类选择的最佳选择是OUTER APPLY
。它专为此类工作而设计:
select d.department_id, oa.employee_name, oa.salary
from Departments d
outer apply(select top 2 e.employee_name, e.salary
from Employee e
where d.department_id = e.department_id
order by e.salary desc) oa
如果您不想让部门没有员工,那么只需将 outer apply
更改为 cross apply
关于sql - 如何返回表中每一行的 X 最大行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30526186/