创建加权平均值 - 为NULL值删除权重

Jar*_*red 12 sql sql-server weighted-average

所以有SQL函数AVG(),它取一列中所有值的平均值,忽略所有NULL值.如果需要进行加权平均,那么他们只需使用SUM(值*权重)/ SUM(权重)和Group By子句.

如果我愿意这样做后者,但我的一些数值是NULL,那么我将如何去告诉SQL忽略与在SUM(重量)函数NULL值的观察权重?

我的另一个问题是我一次平均取90个不同的列,所以我想避免为这个计算制作90个新的权重变量.

如果我明白了这一点,请告诉我.

我正在使用SQL Server 2005

Gor*_*off 25

您将使用条件求和作为分母:

select sum(value*weight) / sum(case when value is not null then weight else 0 end)
Run Code Online (Sandbox Code Playgroud)

如果权重总是大于0,那么您不必担心除以0.这只会在所有值都为NULL时发生.并且,在这种情况下,分子将为NULL.

您也可以将其标记为:

select sum(value*weight) / sum(case when value is not null then weight end)
Run Code Online (Sandbox Code Playgroud)

或作为:

select sum(case when value is not null then value*weight end) / sum(case when value is not null then weight end)
Run Code Online (Sandbox Code Playgroud)

这更加冗长,但很明显你忽略了分子和分母中的NULL值.