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

SQL查询不对HistoryQuantity等数值字段聚合时报GROUP BY错误如何解决

错误原因

你触发报错的核心原因是SELECT子句中存在未聚合的明细计算项:ABS(b.HistoryQuantity - a.TOTFCST) AS 'Abs Error'。SQL的GROUP BY语法规则要求:所有未包裹聚合函数的查询字段,必须全部包含在GROUP BY子句中。你当前分组维度只有LOC、DMDUNIT、DMDPostDate,数据库无法确定同一个分组下有多行数据时,应该取哪一行的HistoryQuantity和TOTFCST计算明细误差,因此抛出错误。

可行解决方案

根据你的实际需求选择对应方案即可:

方案1:需要同时保留明细误差和分组汇总指标

如果你确实需要查看每一行的误差值,同时要对应LOC+DMDUNIT+DMDPostDate维度下的汇总WAPE,用窗口函数替代普通聚合即可,不需要修改GROUP BY逻辑,也不用把数值字段加入分组条件:

-- WAPE (chain) 窗口函数版本
SET ARITHABORT OFF 
SET ANSI_WARNINGS OFF

SELECT 
    b.[LOC], b.[DMDUNIT], b.[DMDPostDate],
    ABS(b.HistoryQuantity - a.TOTFCST) AS 'Abs Error',    
    SUM(b.HistoryQuantity) OVER(PARTITION BY b.[LOC], b.[DMDUNIT], b.[DMDPostDate]) AS 'Sum of Actuals',
    SUM(ABS((b.HistoryQuantity - a.TOTFCST))) OVER(PARTITION BY b.[LOC], b.[DMDUNIT], b.[DMDPostDate])  AS 'Sum of Abs Error', 
    SUM(ABS((b.HistoryQuantity - a.TOTFCST))) OVER(PARTITION BY b.[LOC], b.[DMDUNIT], b.[DMDPostDate]) / SUM(b.HistoryQuantity) OVER(PARTITION BY b.[LOC], b.[DMDUNIT], b.[DMDPostDate]) AS 'WAPE'
FROM 
    SCPOMGR.FCSTPERFSTATIC a
JOIN 
    SCPOMGR.HISTWIDE_CHAIN b ON a.[STARTDATE] = b.[DMDPostDate] 
                             AND a.[DMDUNIT] = b.[DMDUNIT] 
                             AND a.[LOC] = b.[LOC]
ORDER BY 
    b.[LOC]

同分组下的汇总指标会重复出现在该组的每一行数据中,完全符合你的使用要求。

方案2:不需要明细误差,只需要分组汇总的WAPE

如果你是误写了明细误差的字段,只需要维度汇总结果,直接删除SELECT子句中的ABS(b.HistoryQuantity - a.TOTFCST) AS 'Abs Error'行即可,原有GROUP BY逻辑可以正常运行:

-- WAPE (chain) 汇总版本
SET ARITHABORT OFF 
SET ANSI_WARNINGS OFF

SELECT 
    b.[LOC], b.[DMDUNIT], b.[DMDPostDate],
    SUM(b.HistoryQuantity) AS 'Sum of Actuals',
    SUM(ABS((b.HistoryQuantity - a.TOTFCST)))  AS 'Sum of Abs Error', 
    SUM(ABS((b.HistoryQuantity - a.TOTFCST))) / SUM(b.HistoryQuantity) AS 'WAPE'
FROM 
    SCPOMGR.FCSTPERFSTATIC a
JOIN 
    SCPOMGR.HISTWIDE_CHAIN b ON a.[STARTDATE] = b.[DMDPostDate] 
                             AND a.[DMDUNIT] = b.[DMDUNIT] 
                             AND a.[LOC] = b.[LOC]
GROUP BY 
    b.[LOC], b.[DMDUNIT], b.[DMDPostDate]
ORDER BY 
    b.[LOC]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:45:07