如何编写SQL实现按10为区间统计转账金额分布
按10为区间统计转账金额分布的SQL实现
假设转账记录表名为transfer,金额字段为amount,具体语句如下:
SELECT CONCAT(FLOOR(amount / 10) * 10, '-', FLOOR(amount / 10) * 10 + 9) AS 金额区间, COUNT(*) AS 交易笔数 FROM transfer GROUP BY FLOOR(amount / 10) ORDER BY FLOOR(amount / 10) ASC;
代码逻辑说明
- 核心通过
FLOOR(amount / 10)做区间分组:该计算会将所有落在同一个10区间的金额映射为同一个整数,比如0-9的金额计算结果都是0,10-19的计算结果都是1,自然完成区间分组 - 分组后拼接成符合要求的区间展示文本,再聚合统计每个区间的交易数量
- 最后按区间值排序,保证输出结果按金额从小到大排列
不同数据库适配
如果使用PostgreSQL,仅需调整字符串拼接语法即可:
SELECT (FLOOR(amount / 10) * 10) || '-' || (FLOOR(amount / 10) * 10 + 9) AS 金额区间, COUNT(*) AS 交易笔数 FROM transfer GROUP BY FLOOR(amount / 10) ORDER BY FLOOR(amount / 10) ASC;
如果需要统计区间内的总交易金额,只需在SELECT中新增SUM(amount) AS 区间总金额即可。
内容的提问来源于stack exchange,提问作者Avinash Tiwari
相关产品推荐
相关产品推荐

