sql - 第二高的薪水
问题描述
编写 SQL 查询以从 Employee 表中获取第二高的薪水。
| Id | Salary |
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
例如,给定上面的 Employee 表,查询应该返回 200 作为第二高的薪水。如果没有第二高的薪水,那么查询应该返回 null。
| SecondHighestSalary |
| 200 |
这是来自 Leetcode 的一个问题,我为此输入了以下代码:
SELECT CASE WHEN Salary = ''
THEN NULL
ELSE Salary
END AS SecondHighestSalary
FROM (SELECT TOP 2 Salary
,ROW_NUMBER() OVER (ORDER BY Salary DESC) AS Num
FROM Employee
ORDER BY Salary DESC) AS T
WHERE T.Num = 2
它表示如果没有第二高薪水的值,则查询不会返回 NULL。例如。如果表是
| Id | Salary|
| 1 | 100 |
查询应该返回
|SecondHighestSalary|
| null |
并不是
|SecondHighestSalary|
| |
解决方案
在平局的情况下,您需要第二高的不同值。例如,对于值 100、200、300、300,您需要 200。
所以得到最大值(MAX(salary)
=> 300),然后得到小于那个的最大值:
select max(salary) from mytable where salary < (select max(salary) from mytable);
推荐阅读
- vuetify.js - 如何在多个启用的 v-select 组件中预先选择选项?
- python - Python中的真假测验功能
- php - 调用未定义的方法 App\Mail\OrderPlaced::views()
- python - 随机值命令无法正常工作 - Python
- r - R list - 扩展向量元素以列出具有相同名称的元素
- python - Python中的自定义属性设置器/获取器
- git - Adding Container-Scanning to CI in GitLab
- java - MCP940 反编译.bat 错误
- amazon-web-services - list-objects-v2 with --query and --max-items
- node.js - 说话不和谐的机器人