テーブル内のいくつかの値を合計するストアドプロシージャ内のクエリがあります。
SELECT SUM(columnA) FROM my_table WHERE columnB = 1 INTO res;
この選択後、別のクエリで取得した整数でres
値を減算し、結果を返します。 WHERE
句が検証されると、すべて正常に機能します。しかし、そうでない場合、私の関数はすべて空の列を返します(空の値を持つ整数を減算しようとするためかもしれません)。
WHERE
句が満たされない場合、クエリをゼロに戻すにはどうすればよいですか?
あなたは出来る:
_SELECT COALESCE(SUM(columnA), 0) FROM my_table WHERE columnB = 1 INTO res;
_
クエリには集計関数があり、その結果、基になるテーブルに何も見つからない場合でも、常にalwaysが行を返すため、これは機能します。
このような場合、集約なしの単純なクエリはno rowを返します。 COALESCE
は呼び出されず、保存できませんでした。単一の列を処理している間、代わりにクエリ全体をラップできます。
_SELECT COALESCE( (SELECT columnA FROM my_table WHERE ID = 1), 0)
INTO res;
_
元のクエリにも機能します:
_SELECT COALESCE( (SELECT SUM(columnA) FROM my_table WHERE columnB = 1), 0)
INTO res;
_
マニュアルの COALESCE()
の詳細 。
詳細については、 マニュアルの集約関数 。
その他の代替案
私はpostgresqlに精通していませんが、SQL ServerまたはOracleでは、サブクエリを使用すると次のように動作します(Oracleでは、SELECT 0
だろう SELECT 0 FROM DUAL
)
SELECT SUM(sub.value)
FROM
(
SELECT SUM(columnA) as value FROM my_table
WHERE columnB = 1
UNION
SELECT 0 as value
) sub
たぶん、これはpostgresqlでも機能しますか?
あなたも試すことができます:(私はこれを試しましたが、それは私のために働きました)
SELECT ISNULL((SELECT SUM(columnA) FROM my_table WHERE columnB = 1),0)) INTO res;