Netezza不会对案例陈述进行懒惰评估吗?

时间:2011-03-30 10:23:34

标签: sql lazy-evaluation netezza

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

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

错误HY000:除以0

为什么?还有另一种解决方法吗?

1 个答案:

答案 0 :(得分:4)

好吧,我不准确。这是因“除以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,其含义相同。