3

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

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

错误 HY000:除以 0

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

4

1 回答 1

4

好吧,我说的不准确。这是因“除以 0”而失败的确切查询:

select case when min(baba) = 0 then 55 else sum(1/baba) end from t group by baba

这看起来像是 Netezza 的惰性评估失败,请注意我分组 by 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,它具有相同的含义。

于 2011-03-30T12:36:48.033 回答