lintcode-1918 · 第二高的球员的身高
大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界!
描述
编写一个 SQL 语句,获取球员 (players) 表中第二高的身高 (height)
表定义: players (球员表)
列名 | 类型 | 注释 |
---|---|---|
id | int unsigned | 主键 |
height | int | 球员身高 |
**
注意输出结果的列名为:second_height
样例
样例一:
表内容: players
id | height |
---|---|
1 | 198 |
2 | 226 |
3 | 200 |
4 | 226 |
如上述球员 (players) 表,SQL 查询应该返回 200 作为第二高的身高。如果不存在第二高的身高,那么查询应该返回 null
second_height |
---|
200 |
样例二:
表内容: players
id | height |
---|---|
1 | 198 |
2 | 198 |
3 | 198 |
如上述球员 (players) 表,SQL 查询应该返回 null
second_height |
---|
null |
题解
解法1
首先找到身高最大值,然后再根据身高最大值,找到身高第二大的值。
使用max函数,先找到最大值,然后挑选出所有小于最大值的数,再次使用max找到第二大的值。
select max(height) as second_height from players
where height < (select max(p1.height) from players p1);
这个使用了not in (!=)找到其他的高度值,然后在剩下的高度值中,找到第二大的高度值。
select max(height) second_height
from players
where height not in (select max(height)
from players
);
解法2
这个解法主要是分页的思想,首先按照身高之进行排序,然后使用limit和offset找到第二个。
select (select distinct height second_height from players
order by height desc
limit 1
offset 1) as second_height
解法3
IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
IFNULL() 函数语法格式为:
select ifnull((
select distinct height from players order by height desc limit 1,1),null)
as second_height;
- 点赞
- 收藏
- 关注作者
评论(0)