MySQL 查询各年龄段

本文详细介绍了如何使用 MySQL 进行数据分析,针对用户数据按年龄段进行分组查询,涵盖了 SQL 语句的编写及实际操作过程,帮助读者掌握在数据库中统计不同年龄段用户的方法。
SELECT 
  (CASE 
	WHEN CAST(age AS SIGNED) >= 18 and CAST(age AS SIGNED) <= 29 THEN
		'18-29岁'
	WHEN CAST(age AS SIGNED) >= 30 and CAST(age AS SIGNED) <= 39 THEN
		'30-39岁'
	WHEN CAST(age AS SIGNED) >= 40 and CAST(age AS SIGNED) <= 49 THEN
		'40-49岁'
	ELSE
		'-1'
 END) as '年龄段',
 id,`name`,gender,age
FROM user;
年龄段idnameage
30-39岁1张三30
-12张三0
18-29岁3张三23
MySQL 中统计各年龄段人数,可借助 `CASE WHEN` 语句对年龄进行分段,再用 `GROUP BY` 语句按年龄段分组并统计人数。以下是几种实现方法: #### 方法一:通过出生日期计算年龄并统计 此方法从表中提取出生日期,计算年龄,再按年龄段分组统计人数。 ```sql SELECT CASE WHEN age < 20 THEN '19岁及以下' WHEN age <= 29 THEN '20-29岁' WHEN age <= 39 THEN '30-39岁' WHEN age <= 49 THEN '40-49岁' ELSE '50岁及以上' END AS age_group, COUNT(*) AS num_people FROM ( SELECT TIMESTAMPDIFF(YEAR, ry.`出生日期`, CURDATE()) AS age FROM test_ry ry WHERE ry.`出生日期` IS NOT NULL ) t GROUP BY CASE WHEN age < 20 THEN '19岁及以下' WHEN age <= 29 THEN '20-29岁' WHEN age <= 39 THEN '30-39岁' WHEN age <= 49 THEN '40-49岁' ELSE '50岁及以上' END; ``` 上述代码先在子查询里用 `TIMESTAMPDIFF` 函数依据出生日期算出年龄,接着在外部查询用 `CASE WHEN` 语句把年龄划分成不同年龄段,最后用 `GROUP BY` 按年龄段分组并统计人数 [^3]。 #### 方法二:已有年龄字段时的统计 若表中已有年龄字段,可直接按年龄段分组统计。 ```sql SELECT CASE WHEN 年龄 > 21 AND 年龄 <= 25 THEN '21-25' WHEN 年龄 > 26 AND 年龄 <= 30 THEN '26-30' WHEN 年龄 > 31 AND 年龄 <= 35 THEN '31-35' WHEN 年龄 > 36 AND 年龄 <= 40 THEN '36-40' ELSE 'other' END AS age_range, SUM(人数) AS age_range_count FROM ( SELECT COUNT(年龄) AS 人数, 年龄 FROM ( SELECT 姓名, `出生日期`, FLOOR(DATEDIFF(CURDATE(), `出生日期`)/365.2422) AS 年龄 FROM `TABLE 19` ) AS c GROUP BY c.年龄 ) AS b GROUP BY CASE WHEN 年龄 > 21 AND 年龄 <= 25 THEN '21-25' WHEN 年龄 > 26 AND 年龄 <= 30 THEN '26-30' WHEN 年龄 > 31 AND 年龄 <= 35 THEN '31-35' WHEN 年龄 > 36 AND 年龄 <= 40 THEN '36-40' ELSE 'other' END; ``` 上述代码先在最内层子查询里依据出生日期算出年龄,中间子查询按年龄分组统计人数,最外层查询用 `CASE WHEN` 语句划分年龄段并按年龄段分组统计总人数 [^1]。 #### 方法三:另一种通过生日字段计算年龄并分组统计 ```sql SELECT CASE WHEN age < 20 THEN '19岁及以下' WHEN age <= 29 THEN '20-29岁' WHEN age <= 39 THEN '30-39岁' WHEN age <= 49 THEN '40-49岁' ELSE '50岁及以上' END AS age_group, COUNT(*) AS num_people FROM ( SELECT DISTINCT u.user_id, TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) AS 'age' FROM sys_user u ) t GROUP BY CASE WHEN age < 20 THEN '19岁及以下' WHEN age <= 29 THEN '20-29岁' WHEN age <= 39 THEN '30-39岁' WHEN age <= 49 THEN '40-49岁' ELSE '50岁及以上' END; ``` 上述代码先在子查询里用 `TIMESTAMPDIFF` 函数依据生日字段算出年龄,再在外部查询用 `CASE WHEN` 语句划分年龄段并按年龄段分组统计人数 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值