计算平均值时的零除数误差



我正在编写一个查询,以便根据请求获取一些销售统计信息。它在某些日期工作正常,但是当我扩展范围时,它给我错误"ORA-01476:d ivisor 等于零"。我相信这是由于我计算平均值的行。我无法使用内置的 avg 函数,因为它没有给出相同的值。我该如何解决这个问题。

select distinct p.product_code, sum(oi.mass_ordered) "TOTAL MASS ORDERED KG",--OI.ROLL_SHEET,
sum(oit2.mass_shipped) "shipped KG",
(sum(oi.price *(OIt2.MASS_shipped) )/sum(oit2.mass_shipped)) "AVERAGE CALCULATED",
sum(oi.price *(OIt2.MASS_shipped/1000) ) "TOTAL ORDER ITEM PRICE" , count(oi.order_item) "ITEM_COUNT"
from product p
left outer join orderitem oi on p.product_code = oi.product_code
left outer join orderheader oh on oi.order_code = oh.order_code
INNER JOIN ORDERITEMTOTAL oit2 on oi.order_code = oit2.order_code and oi.order_item = oit2.order_item
where oh.date_cust_issued between to_date('01/10/2019 00:00' , 'dd/mm/yyyy HH24:MI') and 
to_date('09/10/2019 23:59' , 'dd/mm/yyyy HH24:MI')
group by p.product_code
order by p.product_code 

使用NULLIF()避免被零除:

(sum(oi.price * OIt2.MASS_shipped) /
nullif(sum(oit2.mass_shipped), 0)
) as "AVERAGE CALCULATED",

这会将0分母转换为NULL,因此表达式返回NULL而不是错误。

最新更新