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



在以下情况下必须返回 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,尽管我认为可能有更好的方法来做到这一点。但是,我无法解决第二个问题:
"没有第二高的薪水,因为每个人都有相同的薪水">

这里有一个类似的@alx方法(顺便说一句,这很好,很简单,所以+1(,但选择第n个最高薪水会更容易概括:

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

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

下面是查询:

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);

查询输出200哪个是正确的答案。我想它也适用于SQL服务器。

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

最新更新