在MySQL中获得第二高的薪水值

时间:2018-11-21 06:50:44

标签: mysql sql subquery

在给定的问题中,

  

编写一个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                 |
+---------------------+

5 个答案:

答案 0 :(得分:2)

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

Salary降序排列,并通过将OFFSET定义为1来获得第二行。我们将在DISTINCT上使用Salary,因为有可能多行以获取最高薪水。

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

答案 1 :(得分:2)

您可以在下面尝试

SELECT MAX(salary) From Employee WHERE salary < ( SELECT Max(salary) FROM Employee);

答案 2 :(得分:1)

尝试一下:

grunt-karma

或更深层次的方法,您可以使用类似以下内容的方法:

karma

所有查询都具有高性能,因为它们没有任何子查询。

答案 3 :(得分:0)

如果要在没有最高工资的情况下显示empty_row(null),则执行以下操作;如果有值,则显示为空

select (select salary
          from Employee ORDER BY salary DESC LIMIT 1,1
        ) as x

答案 4 :(得分:0)

这是解决方案。

SELECT MAX(salary) From Employee WHERE salary < ( SELECT Max(salary) FROM Employee);