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

使用Oracle分析函数OVER PARTITION BY计算累计销售额遇GROUP BY错误求助

解决"not a group by"错误并计算累计销售额

你的问题出在多余的GROUP BY子句上,窗口函数SUM(sales) OVER (...)本身就可以基于原始数据计算累计值,不需要提前分组。

错误原因

你写的查询里,GROUP BY country,month,sales完全是画蛇添足:

  • 窗口函数是对每一行数据逐行计算累计,而GROUP BY会把相同字段组合的行合并,两者逻辑冲突
  • 在严格的SQL模式下(比如MySQL的ONLY_FULL_GROUP_BY),SELECT中的列要么是GROUP BY的字段,要么是聚合函数,窗口函数不属于这个范畴,因此触发报错

正确查询(分两种场景)

场景1:原表中每个国家+月份仅对应一行销售数据(和你提供的数据源匹配)

直接去掉GROUP BY即可:

select country, month, sales,
       sum(sales) over (partition by country order by month) as cumulative_sales
from check2

场景2:原表中同一个国家+月份有多条销售记录(比如每日明细数据)

需要先聚合出每月销售额,再计算累计:

select country, month, monthly_sales,
       sum(monthly_sales) over (partition by country order by month) as cumulative_sales
from (
    select country, month, sum(sales) as monthly_sales
    from check2
    group by country, month
) as monthly_data

结果验证

按第一种场景执行后,就能得到你期望的结果:每个国家按月份排序,每行显示当月销售额和截至当月的累计销售额。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:35:31