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

Oracle SQL使用子查询计算AVG()时返回值与原字段相同问题排查

问题原因
  • 你当前使用的是普通聚合函数+GROUP BY语法,这种语法会按照你指定的a,b,c,d,e,f维度对数据分组,每组仅返回一行聚合结果。但你同时返回了x.*(包含每行唯一的columnz),相当于实际分组粒度到了单行级别,AVG函数计算的就是单行自身的平均值,自然和columnz取值完全一致。
  • 如果你需要保留所有原始行数据的同时,新增一列全局/分组的columnz平均值,应该使用窗口函数(Oracle分析函数),而非普通GROUP BY聚合。
解决方案

如果你需要计算所有行的全局columnz平均值,修改后的SQL如下:

SELECT 
    a,
    b,
    c,
    d,
    e,
    f,
    columnx,
    columny,
    columnz,
    AVG(columnz) OVER () AS avg_columnz
FROM (
    SELECT a,b,c,d,e,f,columnx,columny,columnx-columny AS columnz 
    FROM abc
) x;

如果你需要按a,b,c,d,e,f分组,计算每个分组内的平均columnz,仅需要给窗口函数添加PARTITION BY子句即可:

SELECT 
    a,
    b,
    c,
    d,
    e,
    f,
    columnx,
    columny,
    columnz,
    AVG(columnz) OVER (PARTITION BY a,b,c,d,e,f) AS avg_columnz
FROM (
    SELECT a,b,c,d,e,f,columnx,columny,columnx-columny AS columnz 
    FROM abc
) x;
结果验证

按上述写法修改后,你提供的样例数据的avg_columnz会统一返回(6+3+2+5+1)/5 = 3.4,符合预期的平均值计算效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:45:03