首页 > 解决方案 > 在 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                 |
+---------------------+

标签: mysqlsqlsubquery

解决方案


您可以利用LIMIT {[offset,] row_count}. 参考https://dev.mysql.com/doc/refman/8.0/en/select.html

Salary降序排列,并通过定义为 1 获得第二行OFFSET。我们将使用DISTINCTon Salary,因为可能会有多行表示最高薪水。

SELECT DISTINCT
  Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1,1

推荐阅读