每个部门的前两个薪水

sas*_*har 3 sql oracle greatest-n-per-group

我有一个名为departments的表,其中包含一个名为salary的列.现在我想了解每个部门最高两个薪水的所有细节.我们应该如何开发一个产生所需输出的查询?前N个分析将作为一个整体给出,但不是每个部门.我想要每个部门的前两名.

Jer*_*xon 5

我意识到你在Oracle中要求这样做.我无法帮助你.

但是,也许如果您在MSSQL/TSQL中看到解决方案,它会有所帮助吗?

select 
     d.Salary
    ,d.Department
from
(
    select 
         r.Salary
        ,r.Department
        ,row_number() over(
            partition by r.Department
            order by r.Salary desc) as RowNumber
    from HumanResources as r
) as d
where d.RowNumber < 3
Run Code Online (Sandbox Code Playgroud)

祝你好运!

  • 这应该在Oracle中编写.但是,使用`rank`而不是'rownumber`可能更好.`rownumber`将确保你总是得到2行,但是,如果最高工资在5人之间是相同的,那么你将获得其中两行,半随机,不保证一致性.在同一场景中,"rank"将一致地返回所有5. (3认同)