値が存在しないときに 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 | null と null 以外の混合 | 21 | 21 |
バー | null 以外のすべて | 21 | 21 |
バズ | all null | 0 | 0 |
ご覧のとおり、COALESCE 関数は効率的に '0' を返します。 baz' テーブル。すべての値が NULL です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3