在Oracle SQL中使用Rank时也要排名NULL值

时间:2018-12-02 02:17:58

标签: sql oracle

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

 {{ input('username', 'Username') }}

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

  

|第二最高薪水| | 200 |

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

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

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

2 个答案:

答案 0 :(得分:1)

当没有第二高的值时,您的查询将返回无行。如果您想使用NULL进行一行,则需要实现这一点。一个简单的方法就是聚合函数:

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

答案 1 :(得分:0)

以下查询也将起作用。 min(Salary)max(Salary)都可以使用。

SELECT min(Salary) as "SecondHighestSalary" FROM (
    SELECT Salary, dense_rank() over(ORDER BY Salary DESC) as dense_rank
    from Employee
    ) WHERE dense_rank=2;