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

标签 sql sql-server math statistics

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

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/

相关文章:

mysql - GROUP BY 一列中的多个文本匹配

SQL Server 2005 在 View 中连接多个表,而某些表可能不存在

.net - 不同版本的 SQL Server 之间的 LINQ to SQL 兼容性

sql-server - SQL Server 中的查询性能

c# - 无需 GA/GC 即可最佳获取千分之一秒字符串

c# - 在多个文件中搜索多个字符串的 Grep 工具

sql - 按另一个列值分组和计数

php - 如何从此查询中选择最新日期(不在现有表中)?

python - 确定多组整数的交集是否非空的最快方法是什么?

java - 获取 NaN 作为简单 Java 程序的答案