lintcode-1918 · 第二高的球员的身高

举报
搞前端的半夏 发表于 2021/11/30 22:31:41 2021/11/30
【摘要】 大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界! 描述编写一个 SQL 语句,获取球员 (players) 表中第二高的身高 (height)表定义: players (球员表)列名类型注释idint ...

大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信: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;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。