在计算加权偏差平方和时重做加权平均值(已在另一列中)会导致错误“无法对包含聚合或子查询的表达式执行聚合函数”。
SQRT(SUM(wt.value*SQUARE(out1.value-(SUM(ISNULL(out1.value,0)*wt.value)/SUM(wt.value))))
/ (((COUNT(wt.value)-1)*SUM(wt.value))/(COUNT(wt.value)))) as wsdevInc0
您能否建议如何在 SQL 中计算加权标准偏差,而不是在查询层次结构中添加另一个级别的“SELECT”(并且可能会重复数据选择)?
最佳答案
我刚刚遇到了同样的问题和错误消息。解决的方法是重写加权标准差公式。
总体方差公式(使用 <> 表示平均值,也适用于加权平均值)为:
variance = <(x - <x>)^2>
此表单包含嵌入另一个聚合函数的聚合函数,因此会出现 SQL 错误消息。
解决方案是重写公式,不使用嵌套聚合:
variance = <x^2> - <x>^2
直接将前面的公式相乘,并注意到 <x<x>> = <x><x>
.
标准差只是方差的平方根,因此 SQL 变为:
SQRT( SUM(w*SQUARE(x))/SUM(w) - SQUARE(SUM(w*x)/SUM(w)) )
哪里w
是重量,x
是统计变量。
以上公式适用于人口数据集。对于示例数据集,将上述 SQL 值乘以
SQRT( COUNT(*)/(COUNT(*)-1) )
关于sql - sql server中的加权标准差没有聚合错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10947180/