2017-05-21 100 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; 
相关问题