编写一个 SQL 查询,获取 Employee 表中第二高的薪水( Salary ) 。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,SQL 查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
这个题目求第二高的,而我们的 sql 语句中只有 max 这个关键字求最高的。那么利用最高的这个转化一下就可以了.
select max(Salary) as SecondHighestSalary
from Employee
where
Employee.Salary < (select max(Salary) from Employee);

1
TuringGooner Nov 6, 2018
如果我要第三高或者第四高的薪水呢,性能就太差了吧
这个方法是不是通用性差了点 |
2
awah Nov 6, 2018 via Android
不能 order by 之后 offset limit 取吗?
|
3
cissoid Nov 6, 2018 SELECT IF(
EXISTS(SELECT Salary FROM Employee GROUP BY Salary ORDER BY Salary DESC LIMIT 1, 1), (SELECT Salary FROM Employee GROUP BY Salary ORDER BY Salary DESC LIMIT 1, 1), null ) AS SecondHighestSalary; |
5
mahone3297 Nov 6, 2018
mysql8 窗口函数
|
7
MartinWu Nov 6, 2018
@TuringGunner #1 你为什么会觉得通用跟高性能可以并存?
|
8
littlewing Nov 6, 2018
这个并不通用,也不高性能啊
|
9
lispmacro Nov 6, 2018
select distinct(salary) from employee where rownum = 2; oracle 里这个应该可以吧?
|
10
takato Nov 6, 2018 via iPhone
绝大多数情况下,时间都是要拿空间换的.....
|
11
20015jjw Nov 6, 2018
我看 lz 每次发帖都被喷 挺可怜
好奇 lz 在哪个名企 |