1. ホーム
  2. sql

[解決済み] PostgreSQL でゼロによる除算を回避する

2022-11-05 10:09:07

質問

SELECT句で除算を行いたい。いくつかのテーブルを結合して集約関数を使用すると、NULL値や0値を分割値として使用することがよくあります。今のところ、ゼロやヌル値による除算を避けるために、この方法しか思いつきません。

(CASE(COALESCE(COUNT(column_name),1)) WHEN 0 THEN 1
ELSE (COALESCE(COUNT(column_name),1)) END) 

もっといい方法はないのかなぁ?

どのように解決するのですか?

では count() は決して NULL (他の集約関数と異なり)このような場合は 0 の場合だけを捕まえればよいのです (これはいずれにせよ唯一の問題ケースです)。ですから、あなたのクエリは単純化されます。

CASE count(column_name)
   WHEN 0 THEN 1
   ELSE count(column_name)
END

あるいは、もっとシンプルに NULLIF() , Yuriyが提供したように .

集計関数についてマニュアルを引用します。

<ブロッククオート

注意すべきは count を除いて、これらの関数は を除いて、これらの関数は行が選択されていない場合、null値を返すことに注意してください。