表格名称 user, 字段 id, sex ( M 表示男, F表示 女), birthday出生日期, 没有 age字段
其中 ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) 是获得 年龄
CASE WHEN的格式是:
CASE
WHEN ( 条件) THEN 结果
WHEN ( 条件) THEN 结果
WHEN ( 条件) THEN 结果
END
select count(id) as count,
(
CASE
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 0 and ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) <= 12 THEN '0-12岁'
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 13 and ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) <= 17 THEN '13-17岁'
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 18 and ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) <= 22 THEN '18-22岁'
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 23 and ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) <= 40 THEN '23-30岁'
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 41 and ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) <= 59 THEN '41-59岁'
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 60 THEN '60岁以上'
END
) as ageRange
, sex
from user
GROUP BY
CASE
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 0 and ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) <= 12 THEN '0-12岁'
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 13 and ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) <= 17 THEN '13-17岁'
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 18 and ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) <= 22 THEN '18-22岁'
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 23 and ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) <= 40 THEN '23-30岁'
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 41 and ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) <= 59 THEN '41-59岁'
WHEN ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) >= 60 THEN '60岁以上'
END
,sex
结果:
改进:
SELECT nnd as ageRange,sex,count(*) as count from(
SELECT
CASE
WHEN ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) >= 0 and ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) <= 12 THEN '0-12岁'
WHEN ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) >= 13 and ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) <= 17 THEN '13-17岁'
WHEN ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) >= 18 and ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) <= 22 THEN '18-22岁'
WHEN ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) >= 23 and ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) <= 40 THEN '23-30岁'
WHEN ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) >= 41 and ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) <= 59 THEN '41-59岁'
WHEN ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) >= 60 THEN '60岁以上'
END
as nnd,people_sex as sex
from people_info_sync
) a GROUP BY nnd,sex;
存在的缺点: 如果0-12岁的总数 为 0, 则不会返回该数据