如何编写SQL查询按指定年龄组统计用户数量并升序展示
按指定年龄区间分组统计用户数量
假设你的用户表名为users,存储年龄的字段为age,可以通过以下SQL实现需求:
SELECT age_group, COUNT(*) AS user_count FROM ( SELECT CASE WHEN age BETWEEN 0 AND 10 THEN '[0-10]' WHEN age BETWEEN 11 AND 20 THEN '[11-20]' WHEN age BETWEEN 21 AND 30 THEN '[21-30]' WHEN age BETWEEN 31 AND 40 THEN '[31-40]' WHEN age BETWEEN 41 AND 50 THEN '[41-50]' WHEN age BETWEEN 51 AND 60 THEN '[51-60]' WHEN age > 60 THEN '[61+]' ELSE '未知' END AS age_group FROM users ) AS grouped_data GROUP BY age_group ORDER BY CASE age_group WHEN '[0-10]' THEN 1 WHEN '[11-20]' THEN 2 WHEN '[21-30]' THEN 3 WHEN '[31-40]' THEN 4 WHEN '[41-50]' THEN 5 WHEN '[51-60]' THEN 6 WHEN '[61+]' THEN 7 ELSE 8 END;
说明:
- 内层子查询通过
CASE语句将每个用户的年龄匹配到对应的分组标签,同时处理了年龄为空、负数等异常情况,将其归为“未知”组; - 外层查询按分组标签分组,用
COUNT(*)统计每组的用户总数; ORDER BY中的CASE语句用于强制分组按指定顺序升序排列,避免直接按字符串排序导致的顺序混乱。
内容的提问来源于stack exchange,提问作者ddoch003
相关产品推荐
相关产品推荐

