substring_index

110 阅读2分钟

描述

题目:现在运营举办了一场比赛,收到了一些参赛申请,表数据记录形式如下所示,现在运营想要统计每个性别的用户分别有多少参赛者,请取出相应结果

示例:user_submit

device_idprofileblog_url
2138180cm,75kg,27,malehttp:/url/bigboy777
3214165cm,45kg,26,femalehttp:/url/kittycc
6543178cm,65kg,25,malehttp:/url/tiger
4321171cm,55kg,23,femalehttp:/url/uhksd
2131168cm,45kg,22,femalehttp:/urlsydney

根据示例,你的查询应返回以下结果:

gendernumber
male2
female3

示例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');

输出:

male|2
female|3

解题

方法一

select 
    substring_index(profile,',',-1) gender ,
    count(*) number
from user_submit
group by gender;

方法二

SELECT IF(profile LIKE '%female','female','male') gender,COUNT(*) number
FROM user_submit
GROUP BY gender;

题解

substring_index(str,delim,count)

str:要处理的字符串

delim:分隔符

count:计数

例子:str=www.wikidm.cn

      substring_index(str,'.',1)

      结果是:www

      substring_index(str,'.',2)

      结果是:www.wikidm

      也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容

      相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容,如:

      substring_index(str,'.',-2)

      结果为:wikidm.cn

     有人会问,如果我要中间的的wikidm怎么办?

     很简单的,两个方向:

      从右数第二个分隔符的右边全部,再从左数的第一个分隔符的左边:

  substring_index(substring_index(str,'.',-2),'.',1);