通过忽略Oracle SQL中分母的空值来查找平均值

时间:2020-07-07 00:56:19

标签: sql oracle weighted-average

我们有这样的桌子 enter image description here

现在我们必须基于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) 但是,如果任何列的值为null,则不应在分母中考虑 例如,第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 但是我该如何处理分母

2 个答案:

答案 0 :(得分:1)

您可以使用nvl2()

coalesce()

通常,我更喜欢nvl()nvl()。但是nvl2(){ "status": "OK", "items": [ { "order_id": 1290, "date": "2019-12-24", "services": [ { "start_at": "08:00", "end_at": "09:00", "service_id": 121, "assistant_id": 0 }, { "start_at": "12:00", "end_at": "13:00", "service_id": 122, "assistant_id": 0 } ], } ] } 结合使用似乎很合理。

答案 1 :(得分:0)

Oracle AVG()函数可用于实现您的目的。可以查看Oracle Docs了解有关用法的更多信息。 AVG()函数将忽略NULL值。例如,2、4和NULL的平均值为(2 + 4)/ 2 =3。希望有帮助。