MySQLでNULLを含む列の数値計算を行う方法|IFNULL()関数の使い方
IFNULL()を使えばNULL値を含む計算も安全に実行できる
MySQLでは、NULLが含まれる列同士で足し算などの数値計算を行うと、結果もNULLになってしまいます。これを防ぐには、IFNULL()関数を使用するのが効果的です。IFNULL()は、対象の値がNULLの場合に代わりの値(通常は0)を返してくれるため、NULLと非NULL値が混在するテーブルでも正しく計算できます。
ここからは、実際にサンプルテーブルを作成しながら手順を確認していきましょう。
1. サンプルテーブルを作成する
まず、2つのint型カラムを持つテーブルを作成します。
mysql> create table DemoTable1462
-> (
-> Value1 int,
-> Value2 int
-> );
Query OK, 0 rows affected (0.55 sec)
2. レコードを挿入する
次に、insertコマンドを使ってNULLを含むレコードをいくつか登録します。
mysql> insert into DemoTable1462 values(10,20);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1462 values(50,NULL);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1462 values(NULL,70);
Query OK, 1 row affected (0.25 sec)
3. テーブルの中身を確認する
select文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1462;
実行結果は以下の通りです。Value1とValue2のどちらかにNULLが入っている行があります。
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 10 | 20 |
| 50 | NULL |
| NULL | 70 |
+--------+--------+
3 rows in set (0.00 sec)
4. IFNULL()を使ってNULL値を含む計算を実行する
以下のクエリでは、各カラムをIFNULL()で囲み、NULLだった場合に0へ置き換えてから加算しています。
mysql> select ifnull(Value1,0)+ifnull(Value2,0) from DemoTable1462;
実行結果を見ると、NULLが含まれる行でも正しく合計値が計算されていることがわかります。
+-----------------------------------+
| ifnull(Value1,0)+ifnull(Value2,0) |
+-----------------------------------+
| 30 |
| 50 |
| 70 |
+-----------------------------------+
3 rows in set (0.00 sec)
まとめ
NULLが含まれるカラムで単純に「Value1 + Value2」と書くと、片方がNULLの時点で結果全体がNULLになります。IFNULL(カラム名, 0)のように記述することで、NULLを0として扱い、意図した通りの計算結果を得られます。集計処理やレポート作成の際にはぜひ活用してください。
-
MySQLストアドプロシージャで2つの値を宣言し、数学演算を実行する方法
MySQLストアドプロシージャで変数を宣言して演算を行う方法 MySQLのストアドプロシージャでは、DECLARE文を使ってローカル変数を宣言し、SET文で値を代入することができます。ここでは、2つの整数型の値を宣言し、その積(掛け算)を計算して表示するストアドプロシージャの作成手順を、サンプルコードとともに解説します。 1. ストアドプロシージャの作成 まず、delimiterコマンドでステートメントの区切り文字を変更し、ストアドプロシージャを作成します。 mysql> delimiter // mysql> create procedure declare_demo_sp()
-
MySQLテーブルで先頭ゼロ付きの値を選択して挿入する方法
MySQLで連番に先頭ゼロ(先行ゼロ)を付けた値をテーブルに挿入したい場合は、INSERT INTO SELECT文とLPAD()関数を組み合わせることで実現できます。LPAD()は文字列を指定した長さまで左側を特定の文字で埋める関数で、これを使えば「001」「002」のような形式のIDを簡単に生成できます。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1967 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserId varchar(20)