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

SQL窗口函数AVG PARTITION BY多列分组统计不生效问题咨询

问题原因

你代码的核心错误是在WINDOW子句的PARTITION BY、ORDER BY后用单引号包裹了字段名:

  • SQL中单引号用于标识字符串常量,你写的PARTITION BY 'age', 'working', 'sex'等价于按三个固定不变的字符串做分区,所有数据会被归入同一个分区,最终计算的是全表所有数据的平均值,不会按三个维度拆分分组。
  • 额外冗余问题:如果你需要的是整个分组的平均值,不需要在窗口定义中加ORDER BY,加了之后窗口函数会默认计算「从分区第一行到当前行」的滑动平均值,和你的需求不符。

修正方案

方案1:保留所有原始行,每行附带所属分组的平均值(使用窗口函数)

SELECT
    working, sex, age, 
    ROUND(AVG(primaryNeeds) OVER(w),1) AS primaryNeeds_avg,
    ROUND(AVG(work) OVER(w),1) AS work_avg,
    ROUND(AVG(other) OVER(w),1) AS other_avg
FROM 
    demography
WINDOW w AS (PARTITION BY age, working, sex)

方案2:仅输出每个分组的聚合结果(使用普通GROUP BY,性能更优)

如果不需要保留原始明细行,直接按分组输出统计值,用普通聚合查询更合适:

SELECT
    working, sex, age, 
    ROUND(AVG(primaryNeeds),1) AS primaryNeeds_avg,
    ROUND(AVG(work),1) AS work_avg,
    ROUND(AVG(other),1) AS other_avg
FROM 
    demography
GROUP BY age, working, sex

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:57:03