此问题在此处已有答案:
Second highest grade for each student(3个答案)
Select First Row of Every Group in sql [duplicate](2个答案)
3天前关闭。
你如何在Oracle SQL中找到每个部门工资最高的第三个员工?
Select *
from
(select
emp-id, dept_id,
row_number (order by salary desc) rn
from
employee
group by
emp_id, dept_id, salary)
where rn = 3
字符串
2条答案
按热度按时间8yparm6h1#
您提供的SQL查询看起来几乎是准确的,但是有几个问题。
GROUP BY
子句是不必要的,您必须分别考虑每个部门内的级别(rn
)。您可以通过在ROW_NUMBER()
函数中使用PARTITION BY
子句沿着ORDER BY
子句来实现这一点。下面是更正后的SQL查询:字符串
在这个查询中,
ROW_NUMBER()
函数根据薪水的降序为每个部门中的每一行生成一个唯一的等级。PARTITIONED BY dept_id
可确保为每个部门单独进行排名。然后,在外部查询中,我们选择rank(rn
)等于3的行,这对应于每个部门中工资最高的第三个员工。iklwldmw2#
使用分析RANK或DENSE_RANK函数,具体取决于您要如何处理关系。
字符串