MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでNULLを0として扱って列の値を合計する方法

NULLを0として扱うにはIFNULL()関数を使う

MySQLでNULL値を0として扱いたい場合は、IFNULL()関数を使用します。IFNULL()関数は、第1引数がNULLでない場合はその値をそのまま返し、NULLの場合は第2引数で指定した代替値を返します。これにより、NULLを含む列同士の加算なども正しく計算できるようになります。

まず、実際に動作を確認するためのテーブルを作成してみましょう。

テーブルの作成

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Value1 int,
    Value2 int
);
Query OK, 0 rows affected (0.64 sec)

テストデータの挿入

次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。意図的にNULL値を含むレコードも登録しておきます。

mysql> insert into DemoTable(Value1,Value2) values(10,20);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(Value1,Value2) values(null,null);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Value1,Value2) values(40,null);
Query OK, 1 row affected (0.18 sec)

テーブルの内容を確認する

SELECT文を使って、テーブル内のすべてのレコードを表示してみます。

mysql> select *from DemoTable;

実行すると、次のような結果が出力されます。Value1とValue2にNULLが含まれていることが確認できます。

+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 1  | 10     | 20     |
| 2  | NULL   | NULL   |
| 3  | 40     | NULL   |
+----+--------+--------+
3 rows in set (0.00 sec)

NULLを0として扱って列を加算する

それでは、NULLを0として扱い、Value1とValue2の合計を計算するクエリを見てみましょう。IFNULL()関数で各列を囲むことで、NULLの場合は0に置き換えて計算されます。

mysql> select ifnull(Value1,0)+ifnull(Value2,0) AS NULL_AS_ZERO from DemoTable;

実行結果は以下の通りです。すべてのNULL値が0として扱われ、正しく合計が計算されていることがわかります。

+--------------+
| NULL_AS_ZERO |
+--------------+
| 30           |
| 0            |
| 40           |
+--------------+
3 rows in set (0.00 sec)

補足:IFNULL()とCOALESCE()の違い

なお、MySQLではIFNULL()と同様の目的でCOALESCE()関数も使用できます。IFNULL()は引数を2つしか取れませんが、COALESCE()は複数の引数を取り、最初にNULLでない値を返します。単純にNULLを0に置き換えるだけであれば、どちらを使っても同じ結果が得られます。

このようにIFNULL()関数を活用すれば、NULL値が含まれるデータでも意図した通りの計算結果を得ることができます。数値集計を行う際にNULLの扱いに悩んだら、ぜひこの方法を試してみてください。


  1. MySQLテーブルのNULL列に値を設定・更新する方法

    MySQLでNULL列に値を設定するには? MySQLのテーブルに含まれるNULL(空)の列に後から値を設定したい場合は、IS NULL 条件とUPDATE文を組み合わせることで実現できます。この記事では、実際のサンプルコードを使いながら、NULL列へ値を入力する手順をわかりやすく解説します。 1. サンプルテーブルを作成する まずは商品価格(ProductPrice)、数量(ProductQuantity)、合計金額(TotalAmount)を持つテーブルを作成しましょう。 mysql> create table DemoTable ( ProductPrice int,

  2. 【MySQL】行も列も選択せずに空の結果セットを返す方法

    MySQLでテーブルから行も列も一切表示したくない場合(空の結果セットを取得したい場合)は、SELECT NULLとFALSEを組み合わせて使用します。まずは基本の構文を見てみましょう。 select null from yourTableName where false; サンプルテーブルの作成 実際に動作を確認するため、最初にテーブルを作成します。 mysql> create table DemoTable1367 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> FirstNam