首页 > 解决方案 > 计算平均值时除数为零

问题描述

我正在编写一个查询以按要求获取一些销售统计信息。它适用于某些日期,但是当我扩展范围时,它给我错误“ORA-01476:除数等于零”。我相信这是由于我计算平均值的那条线。我不能使用内置的 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 

标签: sqloracle

解决方案


用于NULLIF()避免被零除:

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

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


推荐阅读