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

如何按year和country分组计算加权平均avg?SQL数据处理需求

解决方案:计算分组加权平均数

你已经精准发现了普通AVG()函数的局限——它只会计算算术平均值,完全忽略了每个average对应的观测样本量。你需要的是以numObserved为权重的加权平均数,这得通过手动计算加权总和与权重总和的比值来实现。

正确的SQL实现代码

直接用下面的语句就能得到你想要的结果(记得替换成你的实际表名):

SELECT
    year,
    country,
    -- 核心逻辑:加权平均 = (观测数×均值)的总和 ÷ 观测数的总和
    SUM(numObserved * average) / SUM(numObserved) AS avg
FROM
    your_target_table -- 替换为你的表名
GROUP BY
    year,
    country
ORDER BY
    year,
    country;

验证计算逻辑

以你给出的year=2016, country=us场景为例:

  • 加权总和:30*15 + 50*40 = 450 + 2000 = 2450
  • 观测数总和:30 + 50 = 80
  • 加权平均:2450 / 80 = 30.625,和你预期的结果完全匹配。

而普通的avg(average)会计算(15+40)/2=27.5,这只是两个average值的算术平均,完全没考虑各自的观测数量权重,自然不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:07:47