统计不同年龄段用户数量,某些区间可能没有用户,需要用0补上,order用来排序。
SELECT `range`, sum(num) num
FROM (
SELECT COUNT(*) AS num,
case
when age<=30 then '30岁以下'
when age<=40 then '30到40岁'
when age<=50 then '40到50岁'
when age<=60 then '50到60岁'
ELSE '60岁以上'
END AS `range`,
case
when age<=30 then 0
when age<=40 then 1
when age<=50 then 2
when age<=60 then 3
ELSE 4
END AS `order`
FROM(
SELECT TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age
FROM user) A
GROUP BY `range`
UNION ALL
SELECT 0 AS num, '30岁以下' AS `range`, 0 AS `order`
UNION ALL
SELECT 0 AS num, '30到40岁' AS `range`, 1 AS `order`
UNION ALL
SELECT 0 AS num, '40到50岁' AS `range`, 2 AS `order`
UNION ALL
SELECT 0 AS num, '50到60岁' AS `range`, 3 AS `order`
UNION ALL
SELECT 0 AS num, '60岁以上' AS `range`, 4 AS `order`
) B
GROUP BY `range`
ORDER BY `order`