sql >> データベース >  >> RDS >> PostgreSQL

レコードが見つからない場合はゼロを返します

    次のことができます:

    SELECT COALESCE(SUM(columnA), 0) FROM my_table WHERE columnB = 1
    INTO res;
    

    クエリには集計関数があり、その結果常にあるため、これはたまたま機能します。 基になるテーブルに何も見つからない場合でも、行を返します。

    集計のないプレーンクエリは行なしを返します このような場合には。 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()の詳細 マニュアルに記載されています。
    マニュアルに記載されている集計関数の詳細。
    その他の代替案 この後の投稿で:

    • 値が見つからない場合に関数から値を返す方法


    1. 'WHERE(col1、col2)<(val1、val2)'のSQL構文用語

    2. 推移閉包に使用される再帰クエリ

    3. SQLServerの実行プランを読み取って分析する方法

    4. SQLiteで現在のドットコマンド設定を表示する方法