【SQL 03 统计每种性别的人数】

题目描述

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

用户申请表 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

题目分析

题目在于我们要在profile字段里提取出用户的相关性别信息;在profile数据包括:身高、体重、年龄、性别,且是以英文逗号作为区分,解决方案有:

  1. SUBSTRING_INDEX 文本函数
  2. LIKE 函数

SQL实现

(1)SUBSTRING_INDEX的写法:

SELECT SUBSTRING_INDEX(profile,",",-1) AS gender,
COUNT(*) AS number
FROM user_submit
GROUP BY gender;

(2)LIKE的写法1:

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

这意味找出所有包含female 的数据 认为是 female,其余的都是male;
(3)LIKE的写法2:

SELECT 
	(
	CASE WHEN profile LIKE '%,male' THEN 'male' 
		 WHEN profile LIKE '%,female' THEN 'female' 
		 END
	) AS gender,
	COUNT(device_id) AS number
	FROM user_submit 
	GROUP BY gender;

写法2里LIKE 后面用%,male中的逗号区分,避免female中的male 带来歧义。

Knowledge Point 知识点

1.SUBSTRING_INDEX() 函数

定义: substring_index()函数用来截取字符串
语法:substring_index(str,delim,count)

str 要处理的字符串
delim  分隔符
count  计数
#示例:
str=www.wiki.com
substring_index(str,'.',1) 
# return:www
substring_index(str,'.',-2) 
# wiki.com
  • 如果 number 是正数,则返回从str左边开始计数的第 number 个delimiter(不包含delimiter)左边的字符串。
  • 如果 number 是负数,则返回从str右边开始计数的第(number的绝对值)个delimiter(不包含delimiter)右边的字符串。
  • BUT,如果要中间的的 wiki 怎么办?
    需要从两个方向截取:
    先截取从右数第二个分隔符的右边的全部内容,再截取从左数的第一个分隔符的左边的全部内容:
substring_index(substring_index(str,'.',-2),'.',1);
# return wiki
Reference

牛客网练习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eason DayDayUp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值