所以有SQL函数AVG(),它取一列中所有值的平均值,忽略所有NULL值。如果需要加权平均值,那么他们只需使用SUM(值*权重)/ SUM(权重)和Group By子句。
如果我想要做后者,但我的一些值是NULL,那么我如何告诉SQL在SUM(权重)函数中忽略具有NULL值观察值的权重?
我的另一个问题是我一次平均取90个不同的列,所以我想避免为这个计算制作90个新的权重变量。
如果我明白了这一点,请告诉我。
我正在使用SQL Server 2005
答案 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值。