以下是我所指的表格。
我想找到每个部门的2名员工,薪水最高。
答案 0 :(得分:5)
使用ROW_NUMBER()
获取每个部门的最高工资,然后从每个部门分区中选择前两个记录:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Dept ORDER BY Salary DESC) AS rn
FROM MyTable ) t
WHERE t.rn <= 2
答案 1 :(得分:5)
除上述答案外,如果存在关系(多个员工共享相同的薪水),您可以使用以下内容将其全部通过,而不是随意选择两个(这是ROW_NUMBER
子句会这样做)
SELECT *
FROM (
SELECT *, DENSE_RANK() OVER (PARTITION BY Dept ORDER BY Salary DESC) AS rn
FROM MyTable ) t
WHERE t.rn <= 2