我正在执行一个可能包含除以0的计算,在这种情况下,我希望结果是任意值(55)。令我惊讶的是,用case语句包装计算并不能完成这项工作!
select case when 1=0 then 3/0 else 55 end
错误HY000:除以0
为什么?还有另一种解决方法吗?
答案 0 :(得分:4)
select case when min(baba) = 0 then 55 else sum(1/baba) end from t group by baba
这看起来像Netezza的懒惰评价失败,因为我注意到baba
分组,所以每当baba为0时,它也意味着min(baba)
为0,评估应该是优雅地停止,没有达到1/baba
期限而没有达到0除法。对吗?好吧,没有。
我猜这里的问题和失败的原因是Netezza在评估汇总条款之前评估行条款。因此,它必须在每一行评估1/baba
和baba
,然后才能评估汇总字词min(baba)
和sum(1/baba)
所以,解决方法(对我而言)是:select case when min(baba) = 0 then 55 else 1/min(baba) end from t group by baba
,其含义相同。