sql server中的加权标准差,没有聚合错误

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
Run Code Online (Sandbox Code Playgroud)

您能否建议如何计算SQL中的加权标准偏差,而不是在查询层次中添加另一级"SELECT"(并且可能重复选择数据)?

Mat*_*att 7

我刚遇到同样的问题和错误信息.解决它的方法是重写加权标准差公式.

人口方差公式,用<>表示平均值,也适用于加权平均值,是:

variance = <(x - <x>)^2>
Run Code Online (Sandbox Code Playgroud)

此表单包含嵌入在另一个聚合函数中的聚合函数,因此是SQL错误消息.

解决方案是在没有嵌套聚合的情况下重写公式:

variance = <x^2> - <x>^2
Run Code Online (Sandbox Code Playgroud)

这直接乘以前面的公式,并注意到<x<x>> = <x><x>.

标准偏差只是方差的平方根,因此SQL变为:

SQRT( SUM(w*SQUARE(x))/SUM(w) - SQUARE(SUM(w*x)/SUM(w)) )
Run Code Online (Sandbox Code Playgroud)

w重量在哪里,x是统计变量.

上述公式适用于人口数据集.对于示例数据集,将上述SQL值乘以

SQRT( COUNT(*)/(COUNT(*)-1) )
Run Code Online (Sandbox Code Playgroud)