4

在计算加权平方和偏差时重做加权平均值(已在另一列中)会导致错误“无法对包含聚合或子查询的表达式执行聚合函数”。

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”(并且可能会复制数据的选择)?

4

1 回答 1

9

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

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

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) )
于 2013-08-30T20:39:56.207 回答