SQL数据分桶统计本质是将连续数值按预设区间归类计数,核心通过CASE WHEN(适合不规则区间)、FLOOR/CEILING(适合等宽分桶)或WIDTH_BUCKET函数(Oracle/PG专属)实现分组逻辑,再配合GROUP BY和COUNT完成统计。

SQL数据分桶统计,本质是把连续数值按预设区间(桶)归类后计数,核心靠 CASE WHEN 或 FLOOR/CEILING + 运算 实现分组逻辑,再配合 GROUP BY 和 COUNT 完成统计。
用 CASE WHEN 明确划分区间(推荐新手)
适合区间不规则、有业务含义或需要自定义标签的场景。比如统计用户年龄分布:
0–17为“未成年”,18–35为“青年”,36–59为“中年”,60+为“老年”。
- 每个区间写一个 WHEN 条件,注意边界是否包含(用 >= / > /
- ELSE 不可少,兜底异常值(如年龄为负、超200等),避免漏统计
- 别在 SELECT 中直接写 COUNT(*),而应先生成“桶列”,再 GROUP BY 该列
示例:
SELECTCASE
WHEN age BETWEEN 0 AND 17 THEN '未成年'
WHEN age BETWEEN 18 AND 35 THEN '青年'
WHEN age BETWEEN 36 AND 59 THEN '中年'
WHEN age >= 60 THEN '老年'
ELSE '未知'
END AS age_group,
COUNT(*) AS cnt
FROM users
GROUP BY age_group;
用 FLOOR 或 CEILING 做等宽分桶(适合数值型连续字段)
当区间等距(如每10岁一桶、每100元一档),用数学函数更简洁、易扩展。关键在构造“桶编号”:用原始值做除法再取整,即可映射到整数桶号。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~