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

时间:2013-03-01 18:45:25

标签: sql sql-server weighted-average

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

如果我想要做后者,但我的一些值是NULL,那么我如何告诉SQL在SUM(权重)函数中忽略具有NULL值观察值的权重?

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

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

我正在使用SQL Server 2005

1 个答案:

答案 0 :(得分:25)

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

select sum(value*weight) / sum(case when value is not null then weight else 0 end)

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

您也可以将其标记为:

select sum(value*weight) / sum(case when value is not null then weight end)

或作为:

select sum(case when value is not null then value*weight end) / sum(case when value is not null then weight end)

这更详细,但很清楚你忽略了分子和分母中的NULL值。