値が存在しない場合に 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 つのテーブルが含まれる次のシナリオを検討してください。値の分布:
次のクエリを適用すると、
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_NAME | DESCRIPTION | EXPECTED_SUM | ACTUAL_SUM |
---|---|---|---|
foo | mixed null/non-null | 21 | 21 |
bar | all non-null | 21 | 21 |
baz | all null | 0 | 0 |
Asご覧のとおり、COALESCE 関数は、すべての値が NULL である「baz」テーブルに対して効率的に「0」を返します。
以上が空のデータセットで MySQL の SUM 関数を使用するときに NULL の代わりに「0」を返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。