题意:


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

分解:


  • 由每个性别,知:group by gender
  • 由于没有gender字段,所以需要去profile中提取gender,即:substring_index(profile,',',-1)
  • 根据统计用户数,知:count(device_id)

代码:


select substring_index(profile,',',-1) gender, count(device_id)  #按照','在profile中,从后往前截取,取倒数第一个逗号后面部分字符串
from user_submit
group by gender  #按性别分组

补充知识点:substring_index的用法


substring_index(“待截取有用部分的字符串”,“截取数据依据的字符”,截取字符的位置N)
  • 取第一个逗号前的字符串 :
SELECT SUBSTRING_INDEX(‘192,168,8,203’,’,’,1); 
    ==>得到结果为: 192
  • N可以为负数,表示倒数第N个索引字符后面的字符串。

(有负号的时候,可以将整个字符倒过来看,依旧是第N个字符前面的部分。)

SELECT SUBSTRING_INDEX(‘192,168,8,203’,’,’,-1); 
  ==>得到结果为: 203
  • 取第2个逗号前那部分字符串里,最后逗号后面的部分
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(‘192,168,8,203’,’,’,2),’,’,-1); 
  ==>得到结果为: 168
  • 取倒数第二个逗号后面部分字符串,再去这部分里第一个都号前的部分:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(‘192,168,8,203’,’,’,-2),’,’,1); 
   ==> 得到结果为:8
 SELECT SUBSTRING_INDEX(‘192,168,8,203’,’,’,-1); 
   ==>得到结果为: 203