mysql 根据生日字段计算年龄,并把年龄分段计数
最近在统计用户年龄,并且需要分组来计数:SELECT IFNULL(count(id),0)num1 from fweb_auth_user_info where TIMESTAMPDIFF(YEAR,birthday,now()) < 18UNION AllSELECT IFNULL(count(id),0)num2 from fweb_auth_user_info where TIMES
最近在统计用户年龄,并且需要分组来计数:
记录一下,学习
第一种方法
-- 统计小于18 岁
SELECT IFNULL(count(id),0)num1 from 表 where TIMESTAMPDIFF(YEAR,生日字段,now()) < 18
UNION All
-- 统计18-30 岁之间,包含18,30
SELECT IFNULL(count(id),0)num2 from where TIMESTAMPDIFF(YEAR,生日字段,now()) between 18 and 30
UNION all
-- 统计31-44 岁之间,包含31,44
SELECT IFNULL(count(id),0)num3 from where TIMESTAMPDIFF(YEAR,生日字段,now()) between 31 and 44
UNION all
-- 统计45-59 岁之间,包含45,60
SELECT IFNULL(count(id),0)num4 from where TIMESTAMPDIFF(YEAR,生日字段,now()) between 45 and 60
UNION all
-- 统计大于60 岁
SELECT IFNULL(count(id),0)num5 from where TIMESTAMPDIFF(YEAR,生日字段,now()) > 60
查询结果如下:
第二种方法(推荐)
SELECT
SUM(if(((year(now())-year(生日字段)-1) + ( DATE_FORMAT(生日字段), '%m%d') <= DATE_FORMAT(NOW(), '%m%d') )<18),1,0)) AS '18岁以下',
SUM(if(((year(now())-year(生日字段)-1) + ( DATE_FORMAT(生日字段), '%m%d') <= DATE_FORMAT(NOW(), '%m%d') )BETWEEN 18 and 30),1,0)) AS '18-30岁之间',
SUM(if(((year(now())-year(生日字段)-1) + ( DATE_FORMAT(生日字段), '%m%d') <= DATE_FORMAT(NOW(), '%m%d') )BETWEEN 31 and 45),1,0)) AS '31-44之间',
SUM(if(((year(now())-year(生日字段)-1) + ( DATE_FORMAT(生日字段), '%m%d') <= DATE_FORMAT(NOW(), '%m%d') )BETWEEN 46 and 60),1,0)) AS '45-60之间',
SUM(if(((year(now())-year(生日字段)-1) + ( DATE_FORMAT(生日字段), '%m%d') <= DATE_FORMAT(NOW(), '%m%d') )>60),1,0)) AS '60以上'
FROM 表
查询结果集:
附
计算年龄的SQL
SELECT ROUND((TO_DAYS(NOW())-TO_DAYS(生日字段))/365) age from 表
TIMESTAMPDIFF用法: TIMESTAMPDIFF(unit,begin,end);
TIMESTAMPDIFF函数允许其参数具有混合类型,例如,begin是DATE值,end可以是DATETIME值。 如果使用DATE值,则TIMESTAMPDIFF函数将其视为时间部分为“00:00:00”的DATETIME值。
第一个是 参数
FRAC_SECOND。表示间隔是毫秒
SECOND。秒
MINUTE。分钟
HOUR。小时
DAY。天
WEEK。星期
MONTH。月
QUARTER。季度
YEAR。年。
第二个参数 是 要对比的时间中时间小的
第三个参数 时间大的参数。
函数结果返回begin-end的结果,其中begin和end是DATE或DATETIME表达式。
eg:
SELECT TIMESTAMPDIFF(MONTH, '2018-01-01', '2018-06-01') result;
结果集:
-- 计算 时间字段和当前相差年数 即 计算年龄
select TIMESTAMPDIFF(year,时间字段,NOW()) from 表
结果集:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)