获取ORA-01476:除数等于零误差

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取ORA-01476:除数等于零误差相关的知识,希望对你有一定的参考价值。

我需要获得两个季度的总交易量,因为查询显示在CASE语句中。第三个CASE语句用于将每个季度的总容量除以总MK_VOL。

现在的问题是,每天的MK_VOL是一个值,所以本质上我需要获取每天的MAX,然后求和整个季度的SUM才能得到MKT_SHARE(即VOL的SUM除以MK_VOL的SUM )。重申一下,对于MK_VOL,不仅要获取整个季度的总数,还需要获取每天的最大值,然后再求和。

您可以看到,MK_VOL与02-APR相同。

现在,我的第三种情况陈述正试图这样做,但出现错误。这是我需要的帮助或更好的解决方案。

我已经尝试执行子查询,但是那也不起作用。

下面的数据集

DATE        Client   VOL    MK_VOL  
----------- -------- ----- -------          
01-APR      AB           2      45
02-APR      AC           3      46
02-APR      AG1         26      46
02-APR      AG2         48      46
03-APR      AD           4      47
06-SEP      AF           5      48
07-SEP      AF           8      50

在下面查询

SELECT CLIENT
       , SUM(CASE WHEN DATE BETWEEN '01-JUL-19' AND '30-SEP-19' THEN VOLUME END) AS Q3_VOLUME
       , SUM(CASE WHEN DATE BETWEEN '01-APR-19' AND '30-JUN-19' THEN VOLUME END) AS Q2_VOLUME
       , SUM(CASE WHEN DATE BETWEEN '01-JUL-19' AND '30-SEP-19' THEN VOLUME END) AS Q3_VOLUME 
          / sum(DISTINCT CASE WHEN DATE BETWEEN '01-JUL-19' AND '30-SEP-19' THEN MKT_VOL END) AS MKT_SHARE
FROM TB1
WHERE TRADE_DATE BETWEEN '01-APR-19' AND '30-SEP-19'
GROUP BY CLIENT

预期结果应为每个客户端的总VOL / SUM(MAX(MK_VOL)。

答案

首先,这里的问题不仅在于您无法按照期望的方式计算值,还出现了“ ORA-01476:除数等于零误差”错误,这意味着您的除数中值为零。您必须修复它,或者至少必须避免它,如我在下面的演示所示。

SELECT CLIENT
SUM(Q3_VOLUME)/SUM(CASE WHEN MKT_SHARE!=0 THEN MKT_SHARE END) V1,
SUM(Q2_VOLUME)/SUM(CASE WHEN MKT_SHARE!=0 THEN MKT_SHARE END) V2
FROM (
SELECT CLIENT,
       DATE   
       SUM(CASE WHEN DATE BETWEEN '01-JUL-19' AND '30-SEP-19' THEN VOLUME END) AS Q3_VOLUME,
       SUM(CASE WHEN DATE BETWEEN '01-APR-19' AND '30-JUN-19' THEN VOLUME END) AS Q2_VOLUME,
       MAX(DISTINCT CASE WHEN DATE BETWEEN '01-JUL-19' AND '30-SEP-19' THEN MKT_VOL END) AS MKT_SHARE
FROM TB1
WHERE TRADE_DATE BETWEEN '01-APR-19' AND '30-SEP-19'
GROUP BY CLIENT,DATE
)
GROUP BY CLIENT 

以上是关于获取ORA-01476:除数等于零误差的主要内容,如果未能解决你的问题,请参考以下文章

ORA-01476: divisor is equal to zero解决方法

SQL Developer 创建函数以查找统计规范化

工作记录之ORacleSQL报错:oracle ORA-01476:divisor is equal to zero

oracle apex 奇怪的零除法问题

Oracle 中 CASE WHEN 语句中的 SUM

oracle 中的语句,老是被提示除数为0,但是数据库中是有数据的!是否写法上出问题了! 请大家帮忙看看