[Leetcode] 176. 第二高的薪水

2018-11-06 09:59:19 +08:00
 Acceml

题目

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

热门阅读

3415 次点击
所在节点    程序员
14 条回复
TuringGunner
2018-11-06 10:14:41 +08:00
如果我要第三高或者第四高的薪水呢,性能就太差了吧

这个方法是不是通用性差了点
luguhu
2018-11-06 10:18:00 +08:00
不能 order by 之后 offset limit 取吗?
cissoid
2018-11-06 10:31:52 +08:00
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;
behanga
2018-11-06 10:52:51 +08:00
@luguhu offset limit 无法区分有多个相同第二高薪水的情况
mahone3297
2018-11-06 10:53:15 +08:00
mysql8 窗口函数
petelin
2018-11-06 11:12:44 +08:00
@behanga 先去重不行?
MartinWu
2018-11-06 11:13:51 +08:00
@TuringGunner #1 你为什么会觉得通用跟高性能可以并存?
littlewing
2018-11-06 12:35:58 +08:00
这个并不通用,也不高性能啊
lispmacro
2018-11-06 12:44:25 +08:00
select distinct(salary) from employee where rownum = 2; oracle 里这个应该可以吧?
takato
2018-11-06 12:55:37 +08:00
绝大多数情况下,时间都是要拿空间换的.....
20015jjw
2018-11-06 13:18:34 +08:00
我看 lz 每次发帖都被喷 挺可怜
好奇 lz 在哪个名企
SukkaW
2018-11-06 13:20:20 +08:00
@20015jjw 他小米的
20015jjw
2018-11-06 13:24:06 +08:00
@SukkaW 小米不考算法么?
talen666
2018-11-07 16:10:08 +08:00
@20015jjw 这帖还好吧 只看到讨论 也没看到喷的啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/504885

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX