2017-05-21 135 views
1

我有如下表:找不到在SQL Server中的第二個最高的薪水

employees table

,並執行以下查詢

select distinct lastname, firstname, max(salary) as salary 
from employees 
where salary not in (select max(salary) from employees) 
group by lastname, firstname 

我得到以下結果:

results of query

我想查找在給定的表中,薪水第二高的僱員的所有名字都是6000工資的那些,但我能找到的唯一答案就是上面的查詢。我現在正在尋找另一種方式來這樣做,但我找不到任何東西。

我正在使用SQL Server。有沒有人有什麼建議?

+0

@simbabque我認爲他只是想與第二最高的薪水 –

+0

提示人們:'DENSE_RANK()' – Sami

回答

4

可以使用dense_rank()窗口功能如下:

select * from (
    select employees.*, dense_rank() over(order by salary desc) rnk from employees 
) t 
where rnk = 2 
+0

感謝您的回答!答案正是我所需要的,它也幫助我找出有關dense_rank()的問題。非常感謝! –

+0

不客氣。 –

2

如果您具有SQL Server 2005或更高版本,你可以使用DENSE_RANK

with a as(
    select lastname,firstname,salary, 
    dense_rank()over(order by salary desc)r 
    from employees 
) 
select lastname,firstname,salary 
from a where r=2; 
相關問題