gpt4 book ai didi

sql - Netezza 不会对 case 语句进行惰性评估吗?

转载 作者:行者123 更新时间:2023-12-01 13:01:45 25 4
gpt4 key购买 nike

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

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

ERROR HY000: Divide by 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 term 和除以 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 不会对 case 语句进行惰性评估吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com