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

如何用SQL子查询汇总所有记录?组件总价计算SQL问题求助

解决SQL子查询汇总及组件总价计算问题

问题核心分析

你碰到的关键问题是运算逻辑错配:直接执行SUM(t1.pmc_precio) * SUM(t2.ccm_cantidad)时,是先把所有组件的单价总和、数量总和分别算出再相乘,这和你需要的「每个组件的(单价×数量)之和」完全不是一回事——数学上SUM(a*b)永远不等于SUM(a)*SUM(b),这就是结果错误的根源。

而你的第一个分组查询是正确的:它先按组件分组,算出单个组件的总价(这里应该是每个组件的单价统一,所以SUM(t1.pmc_precio)等价于单份单价,乘以该组件的总数量得到单个组件总价),你要的总金额其实是把这些单个组件的总价加起来。

两种可行解决方法

方法1:基于已验证的分组查询做二次汇总

把你已经确认正确的分组查询作为子查询,再对其结果求和即可:

SELECT SUM(component_total) AS TOTAL
FROM (
    SELECT t1.coc_codigo, SUM(t1.pmc_precio) * SUM(t2.ccm_cantidad) AS component_total
    FROM precios_componentes_costos t1 
    JOIN composicion_tipos_masa t2 ON t1.coc_codigo = t2.coc_codigo
    WHERE t1.coc_codigo IN (
        SELECT coc_codigo 
        FROM composicion_tipos_masa t3 
        JOIN tipos_masas t4 ON t3.tms_codigo = t4.tms_codigo
        WHERE t3.tms_codigo = 'MMS'
    )
    GROUP BY t1.coc_codigo
) AS component_totals;

方法2:直接计算单条记录乘积再求和

如果每条precios_componentes_costos记录对应单个组件的单价,composicion_tipos_masa记录对应该组件的使用数量,你可以直接计算每条关联记录的pmc_precio * ccm_cantidad,再对所有乘积求和:

SELECT SUM(t1.pmc_precio * t2.ccm_cantidad) AS TOTAL
FROM precios_componentes_costos t1 
JOIN composicion_tipos_masa t2 ON t1.coc_codigo = t2.coc_codigo
WHERE t1.coc_codigo IN (
    SELECT coc_codigo 
    FROM composicion_tipos_masa t3 
    JOIN tipos_masas t4 ON t3.tms_codigo = t4.tms_codigo
    WHERE t3.tms_codigo = 'MMS'
);

方法有效性说明

  • 方法1复用了你已经验证正确的分组逻辑,先得到每个组件的准确总价,再汇总所有组件的总价,完全匹配你的需求。
  • 方法2更简洁:如果单条记录的单价和数量就是对应组件的单份价格和使用量,直接计算乘积再求和的结果和方法1完全一致(前提是你之前的分组逻辑中,SUM(t1.pmc_precio)就是组件的单份单价,SUM(t2.ccm_cantidad)是该组件的总使用量)。

测试这两个查询,应该就能得到你期望的195.591132结果。

内容的提问来源于stack exchange,提问作者Young Al Capone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:20:15