用于查找第二高薪的SQL命令

0 sql greatest-n-per-group

HI,你能告诉我SQL命令的语法,它给出了employee表中存储的工资范围中第二高的工资作为输出.SQL commnd的描述将受到欢迎......请帮助!!!

小智 6

select min(salary) from 
(select top 2 salary from SalariesTable order by salary desc)
as ax
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 5

这应该工作:

select * from (
 select t.*, dense_rank() over (order by salary desc) rnk from employee t
) a 
where rnk = 2;
Run Code Online (Sandbox Code Playgroud)

这将返回第二高薪.

dense_rank() over是一个窗口函数,它为您提供指定集合中特定行的排名.它标准SQL,如SQL:2003中所定义.

窗口函数通常很棒,它们只是很多困难的查询.

略有不同的解决方案:

这是相同的,除了当数字1为平局时返回最高薪水:

select * from (
 select t.*, row_number() over (order by salary desc) rnk from employee t
) a 
where rnk = 2;
Run Code Online (Sandbox Code Playgroud)

更新:将排名更改为dense_rank并添加第二个解决方案.谢谢,IanC!

  • 实际上,@ Martin,它应该是dense_rank().rank()将有间隙,因此如果@ position#1有多个相等的工资,则不会有rnk = 2的结果. (2认同)