我必须在我的表中找到所有公司的第二高薪
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所以请帮助我
答案 0 :(得分:1)
使用dense_rank
之类的分析函数生成编号。在这种情况下,dense_rank
或row_number
比rank
更合适,因为后者在编号方面可能存在空白,在这种情况下您根本无法获得任何结果。当有两个薪水相同的人时,会发生这种情况。如果您使用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;