获取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解决方法