如何用SQL将数据按5个年龄区间分组?已完成首个区间不知后续
SQL年龄区间分组实现方案
可以用CASE WHEN语句完整划分所有年龄区间,再配合GROUP BY完成分组统计。以下是通用实现代码:
SELECT CASE WHEN age < 20 THEN '<20' WHEN age BETWEEN 20 AND 39 THEN '20-39' WHEN age BETWEEN 40 AND 59 THEN '40-59' WHEN age BETWEEN 60 AND 79 THEN '60-79' WHEN age >= 80 THEN '>=80' ELSE '未知' -- 处理年龄为空或异常值的情况 END AS age_group, COUNT(*) AS user_count -- 可替换为SUM、AVG等你需要的聚合函数 FROM your_table_name -- 替换成你的实际表名 GROUP BY age_group ORDER BY CASE age_group WHEN '<20' THEN 1 WHEN '20-39' THEN 2 WHEN '40-59' THEN 3 WHEN '60-79' THEN 4 WHEN '>=80' THEN 5 ELSE 6 END; -- 保证分组结果按区间顺序展示
关键说明:
CASE WHEN按顺序匹配条件,一旦满足就返回对应标签,不会出现重复匹配(比如age=20只会命中第二个条件)ELSE '未知'用于处理年龄为NULL或超出范围的异常数据,避免分组遗漏- 嵌套
CASE的ORDER BY是为了让结果按你定义的区间顺序输出,否则会默认按字符串排序(比如'>=80'会排在'<20'前面)
如果你的SQL方言不支持GROUP BY别名,只需把GROUP BY后的age_group替换成整个CASE语句即可:
GROUP BY CASE WHEN age < 20 THEN '<20' WHEN age BETWEEN 20 AND 39 THEN '20-39' WHEN age BETWEEN 40 AND 59 THEN '40-59' WHEN age BETWEEN 60 AND 79 THEN '60-79' WHEN age >= 80 THEN '>=80' ELSE '未知' END
内容的提问来源于stack exchange,提问作者PC22
相关产品推荐
相关产品推荐

