如何将count统计值分组到指定区间,统计交易表中receiver对应sender的数量分布
实现方案
核心思路
整个需求可以拆成两步实现:
- 先聚合计算每个接收方(receiver)对应的唯一发起方(sender)数量
- 对第一步得到的计数结果按指定区间分组,统计每个区间的接收方数量
兼容多数SQL方言的实现代码
-- 第一步:先统计每个receiver对应的唯一sender数量 WITH receiver_sender_stat AS ( SELECT receiver, COUNT(DISTINCT sender) AS unique_sender_count FROM 交易事务表 -- 替换成你实际的表名 GROUP BY receiver ) -- 第二步:按区间分组统计各区间的receiver数量 SELECT CASE WHEN unique_sender_count = 1 THEN '仅接收1个sender的交易' WHEN unique_sender_count BETWEEN 2 AND 5 THEN '接收2-5个sender的交易' WHEN unique_sender_count BETWEEN 6 AND 10 THEN '接收6-10个sender的交易' WHEN unique_sender_count BETWEEN 11 AND 20 THEN '接收11-20个sender的交易' WHEN unique_sender_count > 20 THEN '接收超过20个sender的交易' END AS 交易区间, COUNT(receiver) AS receiver数量 FROM receiver_sender_stat GROUP BY 交易区间 -- 可选:如果需要按区间顺序排序可以加以下排序逻辑 ORDER BY CASE 交易区间 WHEN '仅接收1个sender的交易' THEN 1 WHEN '接收2-5个sender的交易' THEN 2 WHEN '接收6-10个sender的交易' THEN 3 WHEN '接收11-20个sender的交易' THEN 4 WHEN '接收超过20个sender的交易' THEN 5 END;
注意事项
- 如果你的数据库不支持CTE语法(比如非常老的MySQL版本),可以把CTE的逻辑改成子查询嵌套即可
- 若需要统计包含无交易的receiver,可关联用户主表补全,没有特殊要求的话上述代码即可输出你要的效果
内容的提问来源于stack exchange,提问作者Zaveed Abbasi
相关产品推荐
相关产品推荐

