如何按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
相关产品推荐
相关产品推荐

