首页 > 解决方案 > 在 Oracle SQL 中使用 Rank 时也对 NULL 值进行排名

问题描述

我是一个新手,正在学习 SQL。在实践平台上练习 SQL 时,遇到了一个问题:编写 SQL 查询,从 Employee 表中获取第二高的薪水。

|Id  | Salary 
| 1  | 100   
| 2  | 200 
| 3  | 300 

例如,给定上面的 Employee 表,查询应该返回 200 作为第二高的薪水。如果没有第二高的薪水,那么查询应该返回 null。

| 第二高薪| | 200 |

我打算使用 Oracle Analytical 函数来编写查询。我写的查询如下:

select Salary as SecondHighestSalary 
from (SELECT salary, dense_rank() over(order by salary desc)  myrank 
FROM Employee)
where myrank =2;

我的查询无法处理 NULL 值测试用例并引发错误。谁能回答我的问题?

标签: sqloracle

解决方案


当没有第二高值时,您的查询不返回任何行。如果你想要一个带有 的单行NULL,你需要做到这一点。一个简单的方法是聚合函数:

select max(Salary) as SecondHighestSalary 
from (SELECT salary, dense_rank() over(order by salary desc) as myrank 
      from Employee
     ) e
where myrank = 2;

推荐阅读