SQL销售交易统计:如何修正多表关联后的交易总数统计结果?
解决交易总数统计不符预期的问题
嘿,我来帮你搞定这个统计问题!
问题原因
你当前查询得到totaltransaction=3,是因为Sales Detail表中同一个交易(比如TR01)有多条记录,当三张表关联后,Sales Header里的TR01会被重复匹配两次(对应Detail的两条数据),导致count(salesheader.memberid)把这两次重复的记录都算进去了,而实际你需要统计的是唯一的交易数量。
解决方案1:使用DISTINCT统计唯一交易ID
最简单的修正方式是在count里加上distinct,只统计不重复的transaction_id,这样就能得到实际的交易总数:
select member.name as staffname, count(distinct salesheader.transaction_id) as totaltransaction, sum(salesdetail.qty) as totalqty from member inner join salesheader on member.memberid = salesheader.memberid inner join salesdetail on salesheader.transaction_id = salesdetail.transaction_id group by member.name
解决方案2:先聚合Sales Detail再关联
如果你的数据量比较大,先对Sales Detail按交易ID聚合计算总数量,再和其他表关联,能避免关联后的数据膨胀,提升查询性能:
select m.name as staffname, count(sh.transaction_id) as totaltransaction, sum(sd.total_qty) as totalqty from member m inner join salesheader sh on m.memberid = sh.memberid inner join ( -- 先计算每个交易的总数量 select transaction_id, sum(qty) as total_qty from salesdetail group by transaction_id ) sd on sh.transaction_id = sd.transaction_id group by m.name
这两种方法都能得到你期望的结果:
| staffname | totaltransaction | totalqty |
|---|---|---|
| NEERAJ RANA | 2 | 6 |
内容的提问来源于stack exchange,提问作者senaa
相关产品推荐
相关产品推荐

