このコードでゼロ除算エラーが発生していました:
CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1 * INT2 / DENOMINATOR)
ELSE 0
END AS RATIO
しかし、次のコードに変更すると、機能しました。
CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1) * INT2 / DENOMINATOR
ELSE 0
END AS RATIO
誰かが私が理由を理解するのを手伝ってくれるので、将来これを避けることができますか?ところで、最初のサンプルはVerticaで機能しました。合計がより良いプログラミング手法になる前に計算を行うのではなく、合計する必要があるものだけを合計することを理解しています。しかし、それでも興味があります。
ゼロ除算を回避する最善の方法は、nullif()
を使用することだと思います。
_SUM(INT1 * INT2 / NULLIF(DENOMINATOR, 0))
_
または:
_SUM(INT1) * INT2 / NULLIF(DENOMINATOR, 0)
_
これはNULL
を返します。これは、ゼロ除算の状況でより賢明だと思います。必要に応じて、COALESCE()
を追加して_0
_を取得できます。