在所有公司中找到第二高薪

时间:2014-12-10 17:57:14

标签: sql oracle10g oracle-sqldeveloper

我必须在我的表中找到所有公司的第二高薪

Name   Company Salary

alex    abc    50000
bert    abc    23000
charly  abc    45555
doris   xyz    34444
ellen   xyz    67777
fred    xyz    67771

我只提到了两家公司,如tcs和hcl,但在我的情况下可能会有超过200家公司,所以我不能使用WHERE子句或UNION所以请帮助我

2 个答案:

答案 0 :(得分:1)

使用dense_rank之类的分析函数生成编号。在这种情况下,dense_rankrow_numberrank更合适,因为后者在编号方面可能存在空白,在这种情况下您根本无法获得任何结果。当有两个薪水相同的人时,会发生这种情况。如果您使用rank,则这些人的排名均为1,下一个人的排名将为3

我不知道你是想要第二高的整体,还是每个公司,但我已经展示了两者。如果你需要另一个等级,你可以按其他等级过滤。

SELECT * FROM
  (SELECT
    Name, 
    Company,
    Salary,
    dense_rank() over (order by Salary DESC) as OverallSalaryRank,
    dense_rank() over (partition by Company order by Salary DESC) as SalaryRankPerCompany
  FROM
    SALARIES s)
WHERE
  SalaryRankPerCompany = 2

答案 1 :(得分:1)

此声明将订购您的薪资数据,从最高到最低,并将为每家公司添加排名位置。

WHERE条件会在第二个位置过滤它们。如上所述,如果两个雇主的工资相等,我也会使用DENSE_RANK获得“第二名”。

SELECT Company, Salary 
  FROM ( SELECT Company, Salary, DENSE_RANK() OVER (ORDER BY Salary DESC) sal_rank
           FROM mytable ) 
WHERE sal_rank = 2;