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

MySQL如何合并两个表并按name、code分组对num字段求和得到目标表

实现方案

方案1:UNION ALL + 分组聚合(兼容所有主流数据库,推荐)

核心逻辑是先把两个表的全量数据合并,再按公共维度name、code分组求和,不需要额外处理空值逻辑,适配性更强。

SELECT 
  name,
  code,
  SUM(num) AS num
FROM (
  SELECT name, code, num FROM tableA
  UNION ALL
  SELECT name, code, num FROM tableB
) AS t_combined
GROUP BY name, code
ORDER BY name, code;

逻辑说明:

  • UNION ALL会完整保留两个表的所有记录,不会主动去重
  • 相同name+code的记录会被分到同一组,SUM(num)自动实现数值相加逻辑
  • 仅在单表存在的分组,SUM(num)结果就是原记录的num值,完全匹配需求

方案2:FULL OUTER JOIN 实现(仅支持带全外连接的数据库)

如果使用支持FULL OUTER JOIN的数据库(PostgreSQL、SQL Server、Oracle等),也可以用关联方式实现,注意必须处理空值:

SELECT 
  COALESCE(a.name, b.name) AS name,
  COALESCE(a.code, b.code) AS code,
  COALESCE(a.num, 0) + COALESCE(b.num, 0) AS num
FROM tableA a
FULL OUTER JOIN tableB b
  ON a.name = b.name 
  AND a.code = b.code
ORDER BY name, code;

逻辑说明:

  • COALESCE函数用于取第一个非空值,避免单表存在的记录出现字段为空的问题
  • 关联条件匹配到的记录,两个表的num相加,匹配不到的记录加0,等价于保留原值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:24:04