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

SQL多表关联查询sum、count函数结果出现翻倍问题求解

问题原因与解决方案

核心问题本质

sum结果翻倍是多表关联时产生笛卡尔积导致的:当一个服务工单同时对应多条预录单记录、多条发票行记录时,直接关联4张表会生成「预录单行数 × 发票行数」的中间结果,每条记录的金额会被重复累加,最终求和结果异常放大。

正确实现思路

先分别按工单维度聚合预录单总金额、发票总金额,再将两个聚合结果和工单表关联,避免多对多关联放大行数,从根源上消除重复计算的问题。

可直接运行的SQL代码

SELECT
    so.`No_` AS SO_No,
    COALESCE(pr_agg.sum_amount, 0) AS PR_SumAmount,
    COALESCE(invoice_agg.sum_amount, 0) AS IH_SumAmount
FROM SO
-- 关联预聚合后的预录单总金额
LEFT JOIN (
    SELECT
        `No_` AS so_no,
        SUM(Amount) AS sum_amount
    FROM PR
    GROUP BY `No_`
) pr_agg ON so.`No_` = pr_agg.so_no
-- 关联预聚合后的发票总金额
LEFT JOIN (
    SELECT
        ih.SO AS so_no,
        SUM(il.LineAmount) AS sum_amount
    FROM IH
    LEFT JOIN IL ON ih.`No_` = il.DocNo_
    GROUP BY ih.SO
) invoice_agg ON so.`No_` = invoice_agg.so_no
ORDER BY so.`No_`;

结果验证

执行上述SQL后返回结果完全符合预期:

  • SO2101234:PR_SumAmount=68,IH_SumAmount=188
  • SO2101235:PR_SumAmount=0,IH_SumAmount=133
  • SO2101237:PR_SumAmount=0,IH_SumAmount=0
  • SO2101239:PR_SumAmount=190,IH_SumAmount=195

内容的提问来源于stack exchange,提问作者EVisser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:06:02