mysql - 在 MySQL 中获得第二高的薪水值
问题描述
在给定的问题中,
编写 SQL 查询以从 Employee 表中获取第二高的薪水。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如,给定上面的 Employee 表,查询应该返回 200 作为第二高的薪水。如果没有第二高的薪水,那么查询应该返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
我为这个问题写了一个代码,但是,预期的输出是不同的。
我的代码:
SELECT
CASE
WHEN COUNT(*) = 1 THEN NULL
ELSE (SELECT Salary FROM Employee HAVING Salary < MAX(Salary) ORDER BY Salary DESC LIMIT 1)
END AS SecondHighestSalary
FROM Employee;
我认为我的代码有问题,但我在这里找不到实际问题。我的代码100
没有返回200
。我做错了什么?
+---------------------+
| SecondHighestSalary |
+---------------------+
| 100 |
+---------------------+
解决方案
您可以利用LIMIT {[offset,] row_count}
. 参考https://dev.mysql.com/doc/refman/8.0/en/select.html
按Salary
降序排列,并通过定义为 1 获得第二行OFFSET
。我们将使用DISTINCT
on Salary
,因为可能会有多行表示最高薪水。
SELECT DISTINCT
Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1,1
推荐阅读
- google-chrome - 是什么导致 Chrome 显示错误“请求的凭据模式禁止修改 cookie 和其他本地数据。”?
- css - SCSS 在悬停时更改兄弟颜色
- reactjs - FirebaseError:React js 权限缺失或权限不足
- wordpress - WordPress 每天凌晨 12:00 自动更改具有特定类别的帖子
- javascript - Vuetify 元素上的条件颜色参数
- uwp - 如何创建第二个/双语字幕,与 MediaPlayerElement 的 CC 大小相同
- amazon-web-services - 启动 EC2:更改实例类型后当前不支持请求的配置
- knockout.js - 单击其他位置后按钮更改颜色
- python - 如何将数据抓取与谷歌表格连接起来
- dynamics-crm - 如何使用salesorder的取消步骤