13

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

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

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

让我知道我是否已经说清楚了。

我正在使用 SQL Server 2005

4

1 回答 1

30

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

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 值。

于 2013-03-01T18:46:38.217 回答