MySQL SUM 関数で NULL 値を処理する方法
MySQL では、値が見つからない場合、SUM 関数は多くの場合 NULL を返します。不便になる。この記事では、COALESCE 関数を使用して、値が見つからない場合に SUM が常に「0」を返すようにする方法について説明します。
問題:
次のようなクエリを考えてみましょう。
<code class="sql">SELECT SUM(Column_1) FROM Table WHERE Column_2 = 'Test'</code>
条件を満たすエントリが Column_2 にない場合、関数は NULL を返します。ただし、代わりに '0' を返す方がよい場合もあります。
解決策: COALESCE の使用
この問題に対処するには、COALESCE 関数を使用します。 COALESCE は複数の値を引数として受け取り、最初の非 NULL 値を返します。これを SUM 関数と一緒に使用すると、NULL が発生した場合に結果が常に '0' になるようにできます。
<code class="sql">SELECT COALESCE(SUM(column),0) FROM table WHERE ...</code>
例:
COALESCE 関数をデモンストレーションするための SQL フィドル: http://www.sqlfiddle.com/#!2/d1542/3/0
追加情報:
COALESCEこの関数を他の関数と一緒に使用して、NULL 値を処理することもできます。以下は、異なる値を持つ 3 つのテーブルを使用する例です。
MySQL 5.5.32 スキーマ セットアップ:
<code class="sql">CREATE TABLE foo ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT ); INSERT INTO foo (val) VALUES (null), (1), (null), (2), (null), (3), (null), (4), (null), (5), (null), (6), (null); CREATE TABLE bar ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT ); INSERT INTO bar (val) VALUES (1), (2), (3), (4), (5), (6); CREATE TABLE baz ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT ); INSERT INTO baz (val) VALUES (null), (null), (null), (null), (null), (null);</code>
Query:
<code class="sql">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</code>
結果:
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 |
以上がMySQL SUM 関数が NULL を返さないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。