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

通过连接两个表汇总数据的SQL查询修正求助

问题分析

你当前的SQL语句先执行了TableA和TableB的JOIN操作,这会产生笛卡尔积:同一个Job下,TableA的每一条记录都会和TableB的每一条记录匹配。比如Job=1时,TableA有2条记录、TableB有3条,连接后会生成6条记录,此时再用SUM计算就会把Cost重复累加3次、Sell重复累加2次,最终得到错误的汇总值。

修正方案

正确的做法是先分别对两个表按Job分组汇总,再将汇总后的结果进行关联,以此避免笛卡尔积带来的重复计算:

SELECT 
    COALESCE(a.Job, b.Job) AS Job,
    a.TotalCost AS Cost,
    b.TotalSell AS Sell
FROM 
    (SELECT Job, SUM(Cost) AS TotalCost FROM TableA GROUP BY Job) a
FULL OUTER JOIN 
    (SELECT Job, SUM(Sell) AS TotalSell FROM TableB GROUP BY Job) b
ON 
    a.Job = b.Job;

如果你的数据库不支持FULL OUTER JOIN(比如MySQL),可以用UNION ALL结合分组实现兼容:

SELECT 
    Job,
    SUM(TotalCost) AS Cost,
    SUM(TotalSell) AS Sell
FROM 
    (SELECT Job, SUM(Cost) AS TotalCost, 0 AS TotalSell FROM TableA GROUP BY Job
     UNION ALL
     SELECT Job, 0 AS TotalCost, SUM(Sell) AS TotalSell FROM TableB GROUP BY Job) t
GROUP BY Job;
结果验证

执行修正后的语句后,会得到你期望的结果:

JobCostSell
1300400
2300200

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:06:14