SQL题——截取出年龄

描述

题目:现在运营举办了一场比赛,收到了一些参赛申请,表数据记录形式如下所示,现在运营想要统计每个年龄的用户分别有多少参赛者,请取出相应结果
 
示例:user_submit
device_id profile blog_url
2138 180cm,75kg,27,male http:/ur/bigboy777
3214 165cm,45kg,26,female http:/url/kittycc
6543 178cm,65kg,25,male http:/url/tiger
4321 171cm,55kg,23,female http:/url/uhksd
2131 168cm,45kg,22,female http:/url/sydney
根据示例,你的查询应返回以下结果:
age number
27 1
26 1
25 1
23 1
22 1

示例1

输入:
drop table if exists user_submit;
CREATE TABLE `user_submit` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`profile` varchar(100) NOT NULL,
`blog_url` varchar(100) NOT NULL
);
INSERT INTO user_submit VALUES(1,2138,'180cm,75kg,27,male','http:/url/bisdgboy777');
INSERT INTO user_submit VALUES(1,3214,'165cm,45kg,26,female','http:/url/dkittycc');
INSERT INTO user_submit VALUES(1,6543,'178cm,65kg,25,male','http:/url/tigaer');
INSERT INTO user_submit VALUES(1,4321,'171cm,55kg,23,female','http:/url/uhsksd');
INSERT INTO user_submit VALUES(1,2131,'168cm,45kg,22,female','http:/url/sysdney');
输出:
27|1
26|1
25|1
23|1
22|1

 

 

参考:

题意明确:

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


问题分解:

  • 限定条件:无;
  • 每个年龄:按年龄分组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

完整代码:

 
1
2
3
4
5
select
    substring_index(substring_index(profile, ',', 3), ',', -1) as age,
    count(device_id) as number
from user_submit
group by age

已有 0 条评论

    欢迎您,新朋友,感谢参与互动!