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の扱いに悩んだら、ぜひこの方法を試してみてください。
-
MySQLテーブルのNULL列に値を設定・更新する方法
MySQLでNULL列に値を設定するには? MySQLのテーブルに含まれるNULL(空)の列に後から値を設定したい場合は、IS NULL 条件とUPDATE文を組み合わせることで実現できます。この記事では、実際のサンプルコードを使いながら、NULL列へ値を入力する手順をわかりやすく解説します。 1. サンプルテーブルを作成する まずは商品価格(ProductPrice)、数量(ProductQuantity)、合計金額(TotalAmount)を持つテーブルを作成しましょう。 mysql> create table DemoTable ( ProductPrice int,
-
【MySQL】行も列も選択せずに空の結果セットを返す方法
MySQLでテーブルから行も列も一切表示したくない場合(空の結果セットを取得したい場合)は、SELECT NULLとFALSEを組み合わせて使用します。まずは基本の構文を見てみましょう。 select null from yourTableName where false; サンプルテーブルの作成 実際に動作を確認するため、最初にテーブルを作成します。 mysql> create table DemoTable1367 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> FirstNam