ホームページ  >  記事  >  データベース  >  MySQL の SUM 関数が NULL ではなく「0」を返すのはなぜですか?

MySQL の SUM 関数が NULL ではなく「0」を返すのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 18:43:02639ブラウズ

Why Does MySQL's SUM Function Return '0' Instead of NULL?

MySQL の SUM 関数を使用して NULL の代わりに '0' を取得する

MySQL で SUM 関数を使用して、データ内の値の合計を計算する場合列で、一致する値が見つからない場合、関数は NULL を返します。このような場合に関数に 0 を返させたい場合、この動作は問題となる可能性があります。

この問題を解決するには、COALESCE 関数を使用できます。 COALESCE は 2 つの引数を受け取ります。最初の引数は評価する式で、2 番目の引数は最初の引数が NULL の場合に返したい値です。

SUM 関数の場合、次の構文を使用できます。使用できます:

<code class="sql">SELECT COALESCE(SUM(Column_1), 0)
FROM Table
WHERE Column_2 = 'Test'</code>

この例では、SUM(Column_1) 式が評価されます。 Column_2 に一致する値が見つからない場合、式は NULL を返します。ただし、COALESCE 関数は、NULL ではなく、指定されたデフォルト値 0 を返します。

このアプローチにより、一致する値が見つからない場合でも、SUM 関数は常に数値を返すようになります。その結果、NULL 値を処理するときに発生する可能性のある潜在的な問題を回避できます。

追加情報:

COALESCE の仕組みをより包括的に理解するには、次を参照してください。次のシナリオを考えてみましょう: それぞれ異なるデータ型を持つ 3 つのテーブルが作成されました。

  • テーブル 1: すべての数値
  • テーブル 2: すべての NULL 値
  • 表 3: 数値と NULL 値の混合

これらのテーブルに対して次のクエリを実行すると、COALESCE の機能が示されます。

<code class="sql">SELECT  table_name,
        description,
        expected_sum,
        COALESCE(SUM(val), 0) AS actual_sum
FROM (
    SELECT  'foo'                   AS table_name,
            'mixed null/non-null'   AS description,
            21                      AS expected_sum,
            val
    FROM    Table1
    UNION ALL
    SELECT  'bar'                   AS table_name,
            'all non-null'          AS description,
            21                      AS expected_sum,
            val
    FROM    Table2
    UNION ALL
    SELECT  'baz'                   AS table_name,
            'all null'              AS description,
            0                       AS expected_sum,
            val
    FROM    Table3
) AS subquery
GROUP BY
    table_name,
    description,
    expected_sum
ORDER BY
    table_name,
    description;</code>

このクエリの結果は、データ型に関係なく、COALESCE によって SUM 関数が確実に数値を返し、MySQL アプリケーションでより柔軟で予測可能なデータ処理が可能になることを示しています。

以上がMySQL の SUM 関数が NULL ではなく「0」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。