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

GROUP BY子句报错求助:添加字段后无法生成汇总查询

解决SQL GROUP BY报错并获取正确重量汇总的方案

我来帮你搞定这个问题,你的核心痛点是既要解决GROUP BY的语法错误,又要拿到整个项目的重量汇总结果,而不是按单个运输记录拆分的数据。

问题原因分析

你原来的查询里,子查询引用了外部的ProjShipp.id,但主查询的GROUP BY只包含了ProjInfo.ProjectN。SQL的规则是:SELECT列表里的非聚合列必须要么在GROUP BY里,要么被聚合函数包裹。所以引擎会报错说ProjectShipping.id不符合要求。但如果把ProjShipp.id加入GROUP BY,查询会按每个运输记录分组,结果就变成了每条运输记录的单独数据,而不是整个项目的汇总,这显然不是你想要的。

调整后的查询语句

我们可以把原来的关联子查询改成一个预聚合的子查询,先计算每个运输记录对应的生产重量总和,再和主查询关联后按项目汇总:

SELECT 
    ProjInfo.ProjectN AS BS,
    COALESCE(SUM(fab_weight.weight_fab), 0) AS 'weight fab',
    SUM(ProjShipp.[Weight] * ProjShipp.ShippingNavisionQty) AS 'weight Shipp'
FROM 
    ProjectShipping ProjShipp
INNER JOIN 
    ProjectInfo ProjInfo ON ProjInfo.id = ProjShipp.IdProject
LEFT JOIN (
    -- 预计算每个运输记录对应的生产重量总和
    SELECT 
        DailyPaintProduction.FK_idPartShip,
        SUM(ProjectShipping.[Weight] * DailyPaintProduction.[Quantity]) AS weight_fab
    FROM 
        DailyPaintProduction
    INNER JOIN 
        ProjectShipping ON ProjectShipping.id = DailyPaintProduction.FK_idPartShip
    INNER JOIN 
        ProjectInfo ON ProjectInfo.id = ProjectShipping.IdProject
    WHERE 
        DailyPaintProduction.FK_idNextProcess = 13 
        AND ProjectInfo.FK_Status != 'VENDRE DES MATIERES PREMIERES'
    GROUP BY 
        DailyPaintProduction.FK_idPartShip
) fab_weight ON fab_weight.FK_idPartShip = ProjShipp.id
WHERE 
    ProjInfo.ProjectN = 'BS-00799'
GROUP BY 
    ProjInfo.ProjectN
ORDER BY 
    ProjInfo.ProjectN

关键调整说明

  1. 预聚合子查询:把原来的关联子查询抽出来变成fab_weight,先按FK_idPartShip(也就是运输记录ID)分组,计算每条运输记录对应的生产重量总和,这样避免了主查询的分组冲突。
  2. LEFT JOIN + COALESCE:用LEFT JOIN确保即使某些运输记录没有对应的生产数据,也会被保留在结果里;COALESCE把NULL值转换成0,避免汇总结果出现空值。
  3. 主查询仅按项目分组:主查询的GROUP BY只保留ProjInfo.ProjectN,这样就能得到整个项目的weight fab和weight Shipp的汇总值,完全符合你的需求。

内容的提问来源于stack exchange,提问作者M.Bouabdallah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:41:05