【发布时间】:2019-05-03 17:52:20
【问题描述】:
我是新手,正在学习 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 值测试用例并引发错误。谁能回答我的问题?
【问题讨论】:
-
你得到了什么错误信息?
-
“没有第二高的薪水”的定义是什么?我知道如果只有一个薪水(在整个数据中),就没有第二高的;还有其他情况吗?
-
@ZekiGumus :如果测试用例的值为 null ,我的查询无法将值显示为 null 。错误显示如下: 输入 {"headers": {"Employee": ["Id", "Salary"]}, "rows": {"Employee": [[1, 100]]}} 输出 {"headers ":["SECONDHIGHESTSALARY"],"values":[]} 预期 {"headers":["SecondHighestSalary"],"values":[[null]]}
-
我刚刚获取了您的数据和您的查询以及created a dbfiddle with it。当所有三行都可用时,查询正确返回 200。当只有一行可用时,查询不返回任何内容,因为它应该。当没有行可用时,查询再一次不返回任何内容。请使用标签下方的
edit按钮编辑您的问题,并告诉我们您收到的错误消息。谢谢。 -
@BobJarvis 这是 LeetCode 练习题中的一个问题。所以我只是将问题从那里粘贴到这里。