我正在执行可能包含除以 0 的计算,在这种情况下,我希望结果是任意值 (55)。令我惊讶的是,用 case 语句包装计算并没有完成这项工作!
select case when 1=0 then 3/0 else 55 end
错误 HY000:除以 0
这是为什么?还有另一种解决方法吗?
我正在执行可能包含除以 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 的惰性评估失败,请注意我分组 by 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
,它具有相同的含义。