我是新手,正在学习SQL。在练习平台上练习SQL时,我遇到了以下问题: 编写SQL查询以从Employee表中获取第二高的薪水。
{{ input('username', 'Username') }}
例如,给定上面的Employee表,查询应返回200作为第二高的薪水。如果没有第二高的薪水,则查询应返回null。
|第二最高薪水| | 200 |
我打算使用Oracle Analytical函数编写查询。我写的查询如下:
|Id | Salary
| 1 | 100
| 2 | 200
| 3 | 300
我的查询无法处理NULL值测试用例,并引发错误。谁能回答我的问题?
答案 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;