获得第二高的薪水,如果没有第二高的薪水则返回null

时间:2019-06-22 23:33:21

标签: sql sql-server tsql

在以下情况下必须返回null:
-表中少于2行
-没有第二高的薪水,因为每个人的薪水都相同

我查找的所有内容似乎都针对旧版本的Sql Server

DECLARE @find int = (Select COUNT(*) from Employee);

IF (@find = 1)
    select null as 'SecondHighest'
else
    select Salary as 'SecondHighest' 
    from Employee
    order by Salary desc
    offset 1 rows fetch next 1 rows only;

如果少于2列,我设法返回null,尽管我认为可能有更好的方法。 但是,我无法解决第二个问题:
“没有第二高的薪水,因为每个人的薪水都相同”

2 个答案:

答案 0 :(得分:5)

这里的方法与@alx类似(顺便说一句,它很简单,所以+1),但是更容易概括为第n个最高薪水:

SELECT MAX(Salary)
FROM
(
  SELECT Salary, DENSE_RANK() OVER(ORDER BY Salary DESC) AS Rank
  FROM Employee
) E
WHERE (Rank = 2);

答案 1 :(得分:3)

看看这种方法:http://sqlfiddle.com/#!9/dfb2cf/3

以下是查询:

.eslintrc

这是数据:

select max(Salary) from Employee where Salary < (select max(Salary) from Employee);

查询输出create table Employee (Id int, Salary int); insert into Employee values (1, 100), (2, 200), (3, 300); ,这是正确的答案。我想它也适用于SQL Server。

对于有一条记录的边缘情况,它会输出200,即内部有null的单行,而不是零行。