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值.
| 归档时间: |
|
| 查看次数: |
28585 次 |
| 最近记录: |