题解 | #截取出年龄#

截取出年龄

http://www.nowcoder.com/practice/b8d8a87fe1fc415c96f355dc62bdd12f

题意明确:

统计每个年龄的用户分别有多少参赛者


问题分解:

  • 限定条件:无;
  • 每个年龄:按年龄分组group by age,但是没有age字段,需要从profile字段截取,按字符,分割后取出即可。可使用substring_index函数可以按特定字符串截取源字符串。
    substring_index(FIELD, sep, n)可以将字段FIELD按照sep分隔:
    (1).当n大于0时取第n个分隔符(n从1开始)之后的全部内容;
    (2).当n小于0时取倒数第n个分隔符(n从-1开始)之前的全部内容;
    因此,本题可以先用substring_index(profile, ',', 3)取出"180cm,75kg,27",然后用substring_index(profile, ',', -1)取出27。
    当然也可以用substring_index(substring_index(profile, ",", -2), ",", 1)取出27。
    附:substring_index函数解析
  • 多少参赛者:计数统计,count(device_id)

细节问题:

  • 表头重命名:as

完整代码:

select
    substring_index(substring_index(profile, ',', 3), ',', -1) as age,
    count(device_id) as number
from user_submit
group by age
全部评论
请问为什么不用对年龄排序呢?我的答案错误了
1 回复 分享
发布于 2022-03-01 13:12
请问大佬,为什么count(device_id)不用加distinct去重呢
1 回复 分享
发布于 2021-11-27 13:39
有个疑问,题解中写: (1).当n大于0时取第n个分隔符(n从1开始)之后的全部内容; (2).当n小于0时取倒数第n个分隔符(n从-1开始)之前的全部内容; 那么substring_index(profile, ',', 3),按照n大于0时取第n个分隔符(n从1开始)之后的全部内容,取出的应该是"male",怎么能是"180cm,75kg,27"呢? 看了解析发现,应当是 如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容, 相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容。 可能是题解中“之前”“之后”写反了
23 回复 分享
发布于 2022-08-01 10:55
select substr(profile,12,2) as age, 看到清一色的substring_index() 提供另外一个切片方法 substr(str,开始位置,截取长度)
4 回复 分享
发布于 2021-12-07 14:46
直接使用截取法substring(profile,12,2)是不是更简单一些
1 回复 分享
发布于 2024-10-18 16:44 广东
select substring(profile,12,2) as age,count(device_id) as number from user_submit group by age
1 回复 分享
发布于 2024-01-15 17:40 广东
话说这个题不是可以直接用mid吗?
1 回复 分享
发布于 2023-12-25 11:42 上海
为啥是group up age ,不是先执行group再执行select吗?为啥group by 可以用select中定义的别名?
1 回复 分享
发布于 2022-08-21 16:23 陕西
count(device_id) 最终是要年龄段的分布数的,为什么不是 count(前面提取的age)呢?
1 回复 分享
发布于 2021-12-01 15:15
前后说反了
点赞 回复 分享
发布于 10-27 14:11 辽宁
为啥需要取2次,一次取不出吗
点赞 回复 分享
发布于 04-27 16:38 广东
瞧我的这个花里胡哨的还弄了个内查询 select age,count(age) from( select substring_index(substring_index(profile,',',-2),',',1) as age from user_submit) a group by age
点赞 回复 分享
发布于 2023-10-18 09:16 广东
感觉你这个是最简单易懂的
点赞 回复 分享
发布于 2022-12-07 18:42 四川
为啥order by能使用select定义的别名不是先执行order by吗?
点赞 回复 分享
发布于 2022-10-30 16:11 云南
请问题目是要统计每个年龄的用户分别有多少参赛者,要是表格中有两个年龄一样的人,是不是答案就不对了呢。
点赞 回复 分享
发布于 2022-10-13 20:15 湖北
为什么不能一次截取,要两个截取呢
点赞 回复 分享
发布于 2021-11-29 16:47

相关推荐

牛至超人:把哈工大,再加大加粗,看见闪闪发光的哈工大字样,面试官直接流口水
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
09-30 11:52
门头沟学院 Java
点赞 评论 收藏
分享
评论
153
35
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务