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

SQL窗口函数使用报错:列需出现在聚合函数或GROUP BY子句中

报错原因

核心是SQL执行顺序和GROUP BY的作用范围冲突:

  • SQL执行优先级为:WHERE过滤 → GROUP BY分组 → SELECT子句计算(含窗口函数)
  • 执行完GROUP BY按天分组后,中间结果集仅保留两类内容:GROUP BY指定的日期间隔值、基于原始字段聚合后的计算结果,原始的transaction_amount字段已经不存在于该中间结果集中
  • 你在窗口函数中直接使用SUM(transaction_amount),此时数据库找不到GROUP BY后的transaction_amount字段,默认指向原始表的未聚合字段,因此触发「字段必须出现在GROUP BY或聚合函数中」的报错。

修正方案

先按天聚合得到每日总交易额,再基于聚合后的结果计算3日移动平均值即可,参考代码如下:

SELECT 
    Jan20_day,
    daily_amount,
    -- 窗口函数基于已聚合的日交易额计算平均值
    AVG(daily_amount) OVER(ORDER BY Jan20_day ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS rolling_average
FROM (
    -- 内层先完成日维度的交易额汇总
    SELECT 
        EXTRACT(DAY FROM transaction_time) AS Jan20_day, 
        SUM(transaction_amount) AS daily_amount 
    FROM sales 
    WHERE EXTRACT(MONTH FROM transaction_time) = 1 
      AND EXTRACT(YEAR FROM transaction_time) = 2020 
    GROUP BY EXTRACT(DAY FROM transaction_time)
) daily_sales
ORDER BY Jan20_day

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:48:03