SQL一对多关系中求唯一交易金额总和及关联付款金额总和
解决方案
问题原因
你当前用JOIN关联两张表后,单条交易对应多条付款时,交易金额会被重复输出,直接求和会导致交易金额被多次计算,结果错误。
正确查询方式
方式1:分别统计交易与付款总和(高效简洁)
直接从两张表分别计算目标总和,避免关联带来的重复数据问题:
SELECT (SELECT SUM(sell_amount) FROM trades WHERE client_id = 88) AS total_trade_amount, (SELECT SUM(p.amount) FROM payments p JOIN trades t ON p.trade_id = t.id WHERE t.client_id = 88) AS total_pay_amount;
方式2:先聚合付款再关联交易(支持扩展交易维度信息)
先按交易ID分组计算每条交易的付款总和,再与交易表关联,确保每条交易仅出现一次:
SELECT SUM(t.sell_amount) AS total_trade_amount, COALESCE(SUM(p.total_pay), 0) AS total_pay_amount FROM trades t LEFT JOIN ( SELECT trade_id, SUM(amount) AS total_pay FROM payments GROUP BY trade_id ) p ON t.id = p.trade_id WHERE t.client_id = 88;
这里用COALESCE确保当交易无付款时,付款总和显示为0,避免出现NULL。
两种方式都能得到正确结果:交易金额总和60,付款金额总和50。
内容的提问来源于stack exchange,提问作者Hairi
相关产品推荐
相关产品推荐

