首页 > 解决方案 > 使用 row_number 函数获取第二高值

问题描述

我正在写一个查询以获得公司中个人的第二高薪水。这是我正在处理的具体问题:

https://leetcode.com/problems/second-highest-salary/

这是我已经尝试编写的代码。

select Salary as SecondHighestSalary from
(select Salary, row_number() over (order by Salary desc) as rank 
from Employee)
where rank = 2

我收到错误消息"[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near ')'. (102) (SQLExecDirectW)"

作为一个后续问题,NULL如果数据库中没有第二个薪水(即数据库是一行),我怎样才能让它返回或另一条消息?

标签: sqlsql-server

解决方案


您需要子查询的别名:

select Salary as SecondHighestSalary
from (select Salary,
             row_number() over (order by Salary desc) as rank 
      from Employee
     ) e
where rank = 2;

请注意,这将返回第二个薪水。如果最高薪水有联系,则返回最高薪水。如果你想要第二个,那么你可以使用dense_rank().

或者:

select distinct salary
from employee e
offset 1 row fetch first 1 row only;

推荐阅读