在oraclesql中忽略分母中的空值求平均值

rwqw0loc  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(260)

我们有table一样的

现在我们要在重量的基础上计算出,col1,col2,col3,col4的平均值,分别为0.5,1.0,0.5,1.0,所以公式如下 ((col1*0.5)+(col2*1)+(col3*0.5)+(col4*1))/(0.5+1+0.5+1) 但如果任何列的值为空,则不应将其视为分母,例如,对于第2行,应使用平均公式 ((0.398160315*0.5)+(nvl(col2,0)*1)+(0*0.5)+(nvl(col4,0)*1))/(0.5+0.5) =0.199080161 在sql中计算我可以用nvl(col1,0)处理分子中的null,但如何处理分母中的null呢

aor9mmx1

aor9mmx11#

你可以用 nvl2() :

(0.5*nvl(col1, 0) + 1.0*nvl(col2, 0) + 0.5*nvl(col3, 0) + 1.0*nvl(col4, 0),
 0.5*nvl2(col1, 1, 0) + 1.0*nvl2(col2, 1, 0) + 0.5*nvl2(col3, 1, 0) + 1.0*nvl2(col4, 1, 0)
)

通常,我更喜欢 coalesce()nvl() . 但是 nvl() 与…结合使用似乎是合理的 nvl2() .

cwxwcias

cwxwcias2#

oracle avg()函数可以用来实现你的目的。有关用法的更多信息,请参阅oracle文档。函数的作用是:忽略空值。例如,2、4和null的平均值为(2+4)/2=3。希望有帮助。

相关问题