编写一个 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
TuringGunner 2018-11-06 10:14:41 +08:00
如果我要第三高或者第四高的薪水呢,性能就太差了吧
这个方法是不是通用性差了点 |
2
luguhu 2018-11-06 10:18:00 +08:00 via Android
不能 order by 之后 offset limit 取吗?
|
3
cissoid 2018-11-06 10:31:52 +08:00 1
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 2018-11-06 10:53:15 +08:00
mysql8 窗口函数
|
7
MartinWu 2018-11-06 11:13:51 +08:00
@TuringGunner #1 你为什么会觉得通用跟高性能可以并存?
|
8
littlewing 2018-11-06 12:35:58 +08:00
这个并不通用,也不高性能啊
|
9
lispmacro 2018-11-06 12:44:25 +08:00
select distinct(salary) from employee where rownum = 2; oracle 里这个应该可以吧?
|
10
takato 2018-11-06 12:55:37 +08:00 via iPhone
绝大多数情况下,时间都是要拿空间换的.....
|
11
20015jjw 2018-11-06 13:18:34 +08:00
我看 lz 每次发帖都被喷 挺可怜
好奇 lz 在哪个名企 |