如何编写SQL按Branch统计Trade ID总数与Total Trade Role总数
按Branch维度分组统计交易相关指标的SQL写法
统计口径说明
两个核心指标的计算规则和给出的示例逻辑完全对齐:
- Trade ID总数量:统计每个分支下去重后的独立交易ID个数,同一交易ID关联多个成员时不重复计数
- Total Trade Role总数量:统计每个分支下所有交易关联的成员记录总数,同一交易ID关联N个成员就累计N次计数
参考SQL
假设业务表名为trade_relation(实际使用时替换成真实表名即可),存储分支、交易ID、关联成员ID的字段分别为branch、trade_id、member_id,SQL语句如下:
SELECT branch AS Branch, COUNT(DISTINCT trade_id) AS `Trade ID总数量`, COUNT(member_id) AS `Total Trade Role总数量` FROM trade_relation GROUP BY branch;
逻辑验证
对应提到的Kent分支样例:
该分支下共有3个独立Trade ID,COUNT(DISTINCT trade_id)会自动对重复的Trade ID去重,返回计数3;
其中TradeID 12232关联2个member ID、TradeID 6556关联1个member ID、剩余1个Trade ID关联2个member ID,累计共5条成员关联记录,COUNT(member_id)会统计所有非空的member ID行,返回值5,和预期结果完全一致。
特殊场景适配
- 如果表中存在member_id为空的无效行,当前写法会自动过滤这类空值,不计入Trade Role总数;如果需要把空member_id的记录也纳入统计,把
COUNT(member_id)替换为COUNT(*)即可 - 如果表中存在同一Trade ID重复绑定同一个member ID的脏数据(即trade_id+member_id组合重复出现多行),且这类重复数据不需要累计计数,可以把Total Trade Role的计算逻辑改为
COUNT(DISTINCT trade_id, member_id)(MySQL环境支持多字段去重计数,其他数据库可改用COUNT(DISTINCT CONCAT(trade_id, '||', member_id))实现),避免重复统计。
内容的提问来源于stack exchange,提问作者Biswa
相关产品推荐
相关产品推荐

