「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 空のデータセットで MySQL の SUM 関数を使用するときに NULL の代わりに「0」を返すにはどうすればよいですか?

空のデータセットで MySQL の SUM 関数を使用するときに NULL の代わりに「0」を返すにはどうすればよいですか?

2024 年 11 月 5 日に公開
ブラウズ:331

How to Return \'0\' Instead of NULL When Using MySQL\'s SUM Function on Empty Datasets?

値が存在しないときに MySQL の SUM 関数から '0' を取得する方法

MySQL の SUM 関数は、数値を集計する便利な方法を提供します価値観。ただし、クエリ中に一致する行が見つからない場合、SUM 関数は通常 NULL 値を返します。ユースケースによっては、NULL ではなく '0' を返す方が望ましい場合があります。

COALESCE を使用して問題を解決する

この問題の解決策は次のとおりです。 COALESCE機能。 COALESCE を使用すると、最初の引数が NULL と評価されたときに返されるデフォルト値を指定できます。

次の例を考えてみましょう:

SELECT COALESCE(SUM(Column_1),0)
FROM Table
WHERE Column_2 = 'Test'

このクエリでは、COALESCE が SUM 関数をラップします。 Column_2 が「Test」に等しい行の Column_1 の SUM が NULL 値を返す場合、COALESCE は代わりに「0」を提供します。

デモと詳細情報

http にアクセスしてください。ソリューションのライブ デモンストレーションについては、://www.sqlfiddle.com/#!2/d1542/3/0 をご覧ください。

COALESCE の微妙な違いをさらに詳しく調べるために、異なる 3 つのテーブルが含まれる次のシナリオを検討してください。値の分布:

  • テーブル 'foo' には NULL 値と非 NULL 値が混在しています。
  • テーブル 'bar' には非 NULL 値のみが含まれています。
  • テーブル 'baz' には NULL 値のみが含まれています。

次のクエリを適用すると、

SELECT  'foo'                   as table_name,
        'mixed null/non-null'   as description,
        21                      as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    foo
UNION ALL

SELECT  'bar'                   as table_name,
        'all non-null'          as description,
        21                      as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    bar
UNION ALL

SELECT  'baz'                   as table_name,
        'all null'              as description,
        0                       as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    baz

から次の結果が得られます:

TABLE_NAMEDESCRIPTIONEXPECTED_SUMACTUAL_SUM
foonull と null 以外の混合2121
バーnull 以外のすべて2121
バズ all null00

ご覧のとおり、COALESCE 関数は効率的に '0' を返します。 baz' テーブル。すべての値が NULL です。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3