sql - 在 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 值测试用例并引发错误。谁能回答我的问题?
解决方案
当没有第二高值时,您的查询不返回任何行。如果你想要一个带有 的单行NULL
,你需要做到这一点。一个简单的方法是聚合函数:
select max(Salary) as SecondHighestSalary
from (SELECT salary, dense_rank() over(order by salary desc) as myrank
from Employee
) e
where myrank = 2;
推荐阅读
- python - 将字符串一分为二并将两个元素都匹配到一系列值
- html - 从右到左的样式形状
- configuration - 如何以最低要求在 ubuntu 20.04 上配置 slurm?
- sql - 在 Bigquery 中:如果出现重复,如何在执行完全外连接时选择 max(date) 行?
- javascript - 自动将 window.location.hash 插入 html 输入值?
- python - 在带有熊猫的数据框末尾附加 1 个系列(列)
- orm - 如何强制 typeorm 为一对多关系创建可连接的?
- windows - 由于权限,在 Powershell 脚本中使用 Set-Date 失败
- google-sheets - 如果 A1 有文本,如何突出显示整行
- html - 当字母或数字数量增加时如何将文本向右移动