use*_*275 4 sql sql-server math statistics
在计算加权Sum-Of-Squared-Deviations时,重新加权平均值(已经在另一列中)会导致错误"无法对包含聚合或子查询的表达式执行聚合函数".
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) )