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

SQL技术问题:基于父表Tb1的ID从关联子表获取正确汇总值

问题分析与解决

你的SQL结果数值不对,核心原因是直接关联TransByDep和TRANSUP会产生笛卡尔积——比如某个部门(dep)有多条销售记录和多条采购记录,连接后每条销售记录都会和每条采购记录配对,导致求和时数值被重复计算,最终汇总值偏大。

修正后的SQL语句

先分别对销售、采购数据按部门ID单独汇总,再关联到部门表和部门类型表,彻底避免笛卡尔积的影响:

SELECT 
    dt.Type_ID, 
    dt.DepType, 
    COALESCE(tbd.SUM_SALES, 0) AS SALES, 
    COALESCE(tu.SUM_PURCHASE, 0) AS PURCHASE
FROM 
    DepartmentType dt
INNER JOIN 
    dep d ON dt.Type_ID = d.Type_ID
LEFT JOIN (
    -- 按部门汇总销售金额
    SELECT Dep_Id, SUM(Amount) AS SUM_SALES
    FROM TransByDep
    GROUP BY Dep_Id
) tbd ON d.Dep_ID = tbd.Dep_Id
LEFT JOIN (
    -- 按部门汇总采购金额
    SELECT Dep_id, SUM(Check_amount) AS SUM_PURCHASE
    FROM TRANSUP
    GROUP BY Dep_id
) tu ON d.Dep_ID = tu.Dep_id
GROUP BY 
    dt.Type_ID, dt.DepType, tbd.SUM_SALES, tu.SUM_PURCHASE

关键说明

  • 子查询先完成单表的汇总计算,再进行多表关联,从根源上消除了多表连接带来的行重复问题。
  • 用LEFT JOIN替代INNER JOIN,搭配COALESCE函数,确保即使某个部门没有销售或采购记录,也能返回0值,不会漏掉对应部门类型的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:32:21