我正在执行的计算可能包含除以0,在这种情况下,我希望结果为任意值(55)。令我惊讶的是,用case语句包装计算并没有完成任务!

select case when 1=0 then 3/0 else 55 end

错误HY000:除以0

这是为什么?还有其他解决方法吗?

最佳答案

好的,我不准确。这是因“除以0”而失败的确切查询:
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/babababa,然后才可以评估合计术语min(baba)sum(1/baba)
因此,解决方法(对我而言)是:select case when min(baba) = 0 then 55 else 1/min(baba) end from t group by baba,其含义相同。

关于sql - Netezza不会对案例陈述进行惰性评估吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5485056/

10-11 07:40