MySQL根据出生日期查询年龄,以及对年龄进行分组统计

1. 根据出生日期查询年龄

SELECT TIMESTAMPDIFF(YEAR, DATE(出生日期), CURDATE()) AS 别名 FROM 表名;

函数DATE():提取日期或日期/时间表达式的日期部分;

函数CURDATE():返回当前的日期;

函数TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2):计算两个日期的时间差,unit是计算时间差的单位,可以是SECOND秒、MINUTE分钟、HOUR小时、DAY天、WEEK星期、MONTH月、QUARTER季度、YEAR年。

2.对年龄进行分组统计

a、case 结构

SELECT
	ageGroup, COUNT(*) AS ageNum
FROM
(
	SELECT
		CASE
			WHEN TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) <= 18 THEN	'≤18岁'
			WHEN TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) >= 19 AND TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) <= 20 THEN	'19-20岁'
			WHEN TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) >= 21 AND TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) <= 22 THEN	'21-22岁'
			WHEN TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) >= 23 AND TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) <= 24 THEN	'23-24岁'
			WHEN TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) >= 25 THEN '≥25岁'
			ELSE '未知'
		END AS ageGroup
	FROM 表名
) AS a 
GROUP BY ageGroup;

b、if 结构

SELECT
	 ageGroup, COUNT(*) AS ageNum
FROM
(
	SELECT
		IF(TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) <= 18, '≤18岁',
			IF(TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) >= 19 AND TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) <= 20, '19-20岁',
				IF(TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) >= 21 AND TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) <= 22, '21-22岁',
					IF(TIMESTAMPDIFF(YEAR, DATE(字段), CURDATE()) > 23, '≥23岁', '未知')
				)
			)
		) AS ageGroup
	FROM 表名
) AS a
GROUP BY ageGroup;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值