获得第二高工资,如果没有第二高则返回null

问题描述 投票:0回答:3

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

sql sql-server t-sql
3个回答
6
投票

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

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

5
投票

看看这个方法: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 Server。

对于一条记录的边缘情况,它输出

null
,即内部有
null
的单行,而不是零行结果。


0
投票
declare @maxCount int = (select count(*) from Employee);

if(@maxCount >= 2) 开始 ;将 CTE_SecondHigest 作为 ( 按工资描述从员工订单中选择前 2 个工资) 从 CTE_SecondHigest 按工资顺序选择前 1 个工资 [SecondHighestSalary] 结尾 别的 开始 选择 null [SecondHighestSalary] 结束

© www.soinside.com 2019 - 2024. All rights reserved.