值为'时返回null;不存在于SQL中
我在这里解决这个问题: 这是我已经写过的代码值为'时返回null;不存在于SQL中,sql,sql-server,Sql,Sql Server,我在这里解决这个问题: 这是我已经写过的代码 select Salary as SecondHighestSalary from (select Salary, row_number() over (order by Salary desc) as rank from Employee) temp where rank = 2 如果第二高的值不存在,我想返回null。我想我应该使用CASE,或者是notnull(这是我最熟悉的两个函数)。如果您可以提供两个解决方案,每个解决方案都使用这些功能
select Salary as SecondHighestSalary from
(select Salary, row_number() over (order by Salary desc) as rank
from Employee) temp
where rank = 2
如果第二高的值不存在,我想返回null。我想我应该使用CASE,或者是notnull(这是我最熟悉的两个函数)。如果您可以提供两个解决方案,每个解决方案都使用这些功能,那就太好了。如果您想要第二高的薪水,那么使用
rank()
而不是row\u number()
如果要返回一行,即使不存在行,也要使用聚合
因此:
如果所有薪资相同,则返回
NULL
。选择降序排序后的第二个薪资。如果没有第二份工资,结果将为
null
:
select (
select distinct salary
from employee
order by salary desc
offset 1 rows fetch next 1 rows only
) SecondHighestSalary;
请参见。
别名
rank
需要反勾号,因为它是一个保留字,并且您遗漏了一个括号:max(salary
@forpas…,这取决于数据库,所以我只是更改了名称。OP的链接指向MySQL,但最好重命名。可能是
select (
select distinct salary
from employee
order by salary desc
offset 1 rows fetch next 1 rows only
) SecondHighestSalary;