在给定的问题中,
编写一个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 |
+---------------------+
答案 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);