You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:50:45