MySQLで列の値を合計する際に条件を設定する方法(IF関数の使い方)
MySQLで複数の列の値を足し合わせる際に、特定の条件に基づいて値を制御したい場合は、IF()関数を使うと便利です。IF()関数は「IF(条件, 真の場合の値, 偽の場合の値)」という形式で記述でき、たとえば「負の数は0として扱って合計する」といった処理を簡単に実現できます。
この記事では、実際にテーブルを作成し、条件付きで列の値を合計する手順を順番に解説します。
1. サンプルテーブルを作成する
まず、3つのINT型の列を持つテーブルを作成します。
mysql> create table DemoTable
-> (
-> Value1 int,
-> Value2 int,
-> Value3 int
-> );
Query OK, 0 rows affected (0.64 sec)
2. レコードを挿入する
INSERTコマンドを使ってサンプルデータを登録します。ここでは、後ほど条件分岐の動作を確認できるよう、あえて負の値を含むデータも挿入しています。
mysql> insert into DemoTable values(10,20,-30);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values(50,60,90);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(100,200,400);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values(30,40,-50);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(70,80,-1);
Query OK, 1 row affected (0.24 sec)
3. テーブルの内容を確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable;
実行結果は以下の通りです。
+--------+--------+--------+
| Value1 | Value2 | Value3 |
+--------+--------+--------+
| 10 | 20 | -30 |
| 50 | 60 | 90 |
| 100 | 200 | 400 |
| 30 | 40 | -50 |
| 70 | 80 | -1 |
+--------+--------+--------+
5 rows in set (0.00 sec)
4. 条件を設定して列の値を合計する
ここが本題です。Value3が正の数の場合のみその値を加算し、負の数の場合は0として扱うには、次のようにIF()関数を使用します。
mysql> select Value1+Value2+if(Value3 > 0,Value3,0) from DemoTable;
実行結果:
+---------------------------------------+
| Value1+Value2+if(Value3 > 0,Value3,0) |
+---------------------------------------+
| 30 |
| 200 |
| 700 |
| 70 |
| 150 |
+---------------------------------------+
5 rows in set (0.00 sec)
結果のポイント
出力結果を見ると、Value3が負の値である行(-30、-50、-1)では、Value3が加算されずに0として扱われていることがわかります。
- 1行目:10 + 20 + 0 = 30(-30は無視される)
- 2行目:50 + 60 + 90 = 200
- 3行目:100 + 200 + 400 = 700
- 4行目:30 + 40 + 0 = 70(-50は無視される)
- 5行目:70 + 80 + 0 = 150(-1は無視される)
補足:CASE式でも同じことができる
IF()関数の代わりにCASE式を使っても、同様の条件付き集計が可能です。
mysql> select Value1+Value2+
-> case when Value3 > 0 then Value3 else 0 end
-> from DemoTable;
単純な二択の条件ならIF()関数が簡潔ですが、より複雑な条件分岐が必要なケースでは、CASE式の方が柔軟に対応できます。用途に応じて使い分けるとよいでしょう。
-
MySQLで最初の3件のレコードに特定の値を設定する方法
MySQLで、テーブルの最初の3件のレコードだけに特定の値を設定したい場合は、UPDATE文と組み合わせて LIMIT 3 を使用します。MySQLのUPDATE文は ORDER BY 句と LIMIT 句をサポートしているため、更新対象の行数を簡単に制御できます。ここでは、実際の手順をサンプルコードとともに解説します。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1968 ( Id int NOT NULL AUTO_I
-
MySQLで列にENUM型を設定する方法
```html MySQLでは、テーブルを作成する際に、あらかじめ決められた文字列のリストから値を選ばせたい列に対してENUM型を設定できます。ENUMは、指定した候補値以外のデータが登録されるのを防ぎたい場合に便利なデータ型です。ここでは、実際にテーブルを作成しながら基本的な使い方を見ていきましょう。ENUM型を含むテーブルを作成するまず、学生の点数と合否ステータスを管理するテーブルを作成します。「StudentStatus」列には「First」「Second」「Fail」の3つの値のみを許可するENUM型を設定しています。mysql> create table DemoTable20