Snowflake按金额区间分组统计:如何实现指定格式的采购数据统计?
最简实现方法
核心是通过CASE WHEN精准划分金额区间,搭配GROUP BY和COUNT()完成统计,同时规避区间重叠、重复计数等常见问题。
假设你的表名为purchase_records,采购ID字段为purchase_id,金额字段为amount(数值类型,如DECIMAL),直接执行以下SQL即可得到目标结果:
SELECT CASE WHEN amount BETWEEN 0 AND 500 THEN '$0 - $500' WHEN amount BETWEEN 501 AND 1999 THEN '$501 - $1999' WHEN amount BETWEEN 2000 AND 2999 THEN '$2000 - $2999' -- 可选:统计超出指定区间的记录,不需要可删除此分支 ELSE '其他区间' END AS `金额区间`, -- 若单采购ID对应多条记录,用DISTINCT去重;每条记录对应唯一ID则直接用COUNT(purchase_id) COUNT(DISTINCT purchase_id) AS `数量` FROM purchase_records -- 可选:过滤负数等无效金额,不需要可删除 WHERE amount >= 0 GROUP BY `金额区间` -- 强制按区间逻辑顺序排序,避免字符串排序导致的顺序混乱 ORDER BY CASE `金额区间` WHEN '$0 - $500' THEN 1 WHEN '$501 - $1999' THEN 2 WHEN '$2000 - $2999' THEN 3 ELSE 4 END;
常见问题排查(针对你之前结果不符的情况)
- 区间重叠:比如同时将500包含在两个
CASE条件中,导致统计重复 - 重复计数:未使用
DISTINCT,同一采购ID被多次统计 - 顺序混乱:未指定
ORDER BY,字符串排序会让区间顺序不符合预期 - 无效数据干扰:未过滤负数、NULL等异常金额值
内容的提问来源于stack exchange,提问作者SharkyShark
相关产品推荐
相关产品推荐

