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

MySQL如何实现两张关联表的双SUM分组求和查询?

MySQL双表分组求和查询方案

注意:不要直接关联两张表后执行SUM运算,否则会产生笛卡尔积导致统计值翻倍,同个idUnit在两张表各有N、M条记录时,聚合结果会是正确值的M、N倍,不符合需求。

正确实现逻辑为:先分别对两张表按idUnit分组求和得到各自的统计结果,再通过idUnit字段关联两个统计结果集即可。

基础写法(覆盖所有在Tabel_1中出现过的idUnit)

SELECT 
  t1.idUnit,
  t1.TotalBudget,
  COALESCE(t2.TotalReal2, 0) AS TotalReal2
FROM (
  -- 先统计Tabel_1每个idUnit的总预算
  SELECT idUnit, SUM(Budget) AS TotalBudget
  FROM Tabel_1
  GROUP BY idUnit
) t1
LEFT JOIN (
  -- 再统计Tabel_2每个idUnit的总实际值
  SELECT idUnit, SUM(Real2) AS TotalReal2
  FROM Tabel_2
  GROUP BY idUnit
) t2 ON t1.idUnit = t2.idUnit;

兼容写法(覆盖两张表中所有出现过的idUnit)

如果需要包含仅在Tabel_2中存在的idUnit,MySQL不支持全外连接,可以用UNION ALL合并后二次聚合的方式实现:

SELECT 
  idUnit,
  SUM(TotalBudget) AS TotalBudget,
  SUM(TotalReal2) AS TotalReal2
FROM (
  SELECT idUnit, SUM(Budget) AS TotalBudget, 0 AS TotalReal2
  FROM Tabel_1
  GROUP BY idUnit
  UNION ALL
  SELECT idUnit, 0 AS TotalBudget, SUM(Real2) AS TotalReal2
  FROM Tabel_2
  GROUP BY idUnit
) t
GROUP BY idUnit;

以上两种写法针对你提供的测试数据,都会返回idUnit=112、TotalBudget=3000、TotalReal2=600的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 11:45:03