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

求助:基于3张MySQL表的sum()聚合关联查询实现

MySQL多表聚合查询解决方案

针对你需要从三个表中按人员聚合求和的需求,可通过以下SQL语句实现:

核心思路

先分别对每张表按name字段聚合计算总和,再通过获取所有唯一姓名后左连接各聚合结果,确保所有出现过的人员都被包含,缺失的数据自动显示为NULL。

完整SQL语句

SELECT 
    all_names.name,
    t1.sum_bill AS `sum(bill)`,
    t2.sum_total AS `sum(total)`,
    t3.sum_amount AS `sum(amount)`
FROM (
    -- 提取所有表中出现过的唯一姓名
    SELECT name FROM Table_1
    UNION
    SELECT name FROM Table_2
    UNION
    SELECT name FROM Table_3
) AS all_names
LEFT JOIN (
    -- 统计Table_1中每人的bill总和
    SELECT name, SUM(bill) AS sum_bill
    FROM Table_1
    GROUP BY name
) AS t1 ON all_names.name = t1.name
LEFT JOIN (
    -- 统计Table_2中每人的total总和
    SELECT name, SUM(total) AS sum_total
    FROM Table_2
    GROUP BY name
) AS t2 ON all_names.name = t2.name
LEFT JOIN (
    -- 统计Table_3中每人的total总和(对应输出的sum(amount))
    SELECT name, SUM(total) AS sum_amount
    FROM Table_3
    GROUP BY name
) AS t3 ON all_names.name = t3.name
ORDER BY all_names.name;

语句解释

  1. 获取所有唯一姓名:使用UNION合并三个表的name字段,自动去重得到所有出现过的人员姓名,避免遗漏只在单个表中存在的人员(比如示例中的Kevin)。
  2. 左连接聚合结果:将每个表的聚合结果通过LEFT JOIN关联到唯一姓名集合,确保即使人员在某些表中没有数据,对应的求和列也会显示NULL,符合需求输出格式。
  3. 字段别名:用AS给聚合后的字段命名,与需求的输出列名完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:53:12