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

如何在SQL中按年月分组计算评分平均值

问题根因

原代码无法得到正确结果,是两个写法错误导致的:

  • 混用窗口函数与分组聚合:AVG() OVER(...)是窗口函数,会保留所有原始行、为每一行附加窗口计算结果,不会折叠分组后的行,不符合按月聚合的需求
  • GROUP BY粒度错误:把score加入分组字段后,分组维度变成了「月份+具体评分值」,无法计算整月的全局平均分
正确实现代码

不需要用窗口函数,直接用普通分组聚合即可,额外加月份截断处理避免跨年同月混淆、保证排序正确:

SELECT
  TO_CHAR(created_at, 'Mon YYYY') AS date,
  AVG(score) AS average_score
FROM reviews
WHERE score IS NOT NULL
GROUP BY TO_CHAR(created_at, 'Mon YYYY'), DATE_TRUNC('month', created_at)
ORDER BY DATE_TRUNC('month', created_at);

代码说明:DATE_TRUNC('month', created_at)会把日期统一截断到对应月份的第一天,既可以保证不同年份的相同月份不会被错误归为一组,也能让最终结果按时间先后顺序输出,和预期格式完全匹配。

基于给出的示例数据,上述代码执行后返回的结果和需求完全一致:

dateaverage_score
Jan 20223
Feb 20222.5
Mar 20225

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:03:20