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で除算
何故ですか?別の回避策はありますか?
わかりました、私は不正確でした。これは、「ゼロ除算」で失敗する正確なクエリです。
select case when min(baba) = 0 then 55 else sum(1/baba) end from t group by baba
これは、Netezzaからの遅延評価の失敗のように見えます。これは、でグループ化することに注意してくださいbaba。したがって、babaが0の場合は常に、0であることも意味します。評価は、用語に到達して除算に失敗min(baba)することなく、正常に停止する必要があります。1/baba0.そうですか?うーん、ダメ。
私が推測するのは、ここでの落とし穴であり、失敗の理由は、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です。これは同じ意味です。