MySQLのCASE文で数学演算を実行する方法|ELSE句との組み合わせを解説
はじめに
MySQLで条件に応じた数学演算を実行したい場合、IF関数だけでなくCASEステートメントを使う方法がおすすめです。CASE文では「THEN」で条件成立時の処理を、「ELSE」でそれ以外の場合の処理を柔軟に記述できます。
この記事では、実際にテーブルを作成し、CASE文とELSE句を組み合わせて数学演算を行う手順を具体的に解説します。
サンプルテーブルの作成
まず、果物の名前と価格を格納するテーブルを作成します。
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FruitName varchar(100),
FruitPrice int
);
Query OK, 0 rows affected (0.26 sec)テストデータの挿入
次に、INSERTコマンドを使っていくつかのレコードを挿入します。
mysql> insert into DemoTable(FruitName,FruitPrice) values('Orange',250);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(FruitName,FruitPrice) values('Banana',100);
Query OK, 1 row affected (0.05 sec)
mysql> insert into DemoTable(FruitName,FruitPrice) values('Apple',150);
Query OK, 1 row affected (0.05 sec)
mysql> insert into DemoTable(FruitName,FruitPrice) values('Pomegranate',200);
Query OK, 1 row affected (0.10 sec)登録データの確認
SELECT文ですべてのレコードを表示して確認しましょう。
mysql> select *from DemoTable;
実行すると、以下のような結果が出力されます。
+----+-------------+------------+ | Id | FruitName | FruitPrice | +----+-------------+------------+ | 1 | Orange | 250 | | 2 | Banana | 100 | | 3 | Apple | 150 | | 4 | Pomegranate | 200 | +----+-------------+------------+ 4 rows in set (0.19 sec)
CASE文とELSE句で数学演算を実行する
ここからが本題です。以下のクエリでは、CASEステートメントの中で数学演算を実行しています。果物名が「Orange」の場合は価格を5で割り、それ以外の場合(ELSE)は元の価格をそのまま表示します。
mysql> select Id,FruitName,FruitPrice,
case
when FruitName='Orange'
then FruitPrice/5
else FruitPrice
end as OriginalPrice
from DemoTable;実行結果
このクエリを実行すると、次のような出力が得られます。
+----+-------------+------------+---------------+ | Id | FruitName | FruitPrice | OriginalPrice | +----+-------------+------------+---------------+ | 1 | Orange | 250 | 50.0000 | | 2 | Banana | 100 | 100 | | 3 | Apple | 150 | 150 | | 4 | Pomegranate | 200 | 200 | +----+-------------+------------+---------------+ 4 rows in set (0.00 sec)
結果のポイント
注目すべき点は以下の通りです。
- Orange(Id=1):条件に一致したため、FruitPrice/5 の計算結果である「50.0000」が表示されています。除算により小数点付きの値になっている点に注意してください。
- その他の果物(Banana・Apple・Pomegranate):ELSE句が適用され、元の価格がそのまま整数で表示されています。
まとめ
このように、MySQLではCASEステートメントのTHEN句やELSE句の中で自由に数学演算を実行できます。IF関数でも同様の処理は可能ですが、複数の条件分岐が必要な場合や可読性を重視したい場合は、CASE文の方が適しています。割り算などの演算では結果が小数になる場合があるため、必要に応じてROUND関数やCAST関数と組み合わせると、より意図した形式で出力できます。
-
MySQLのUPDATE文にLIMITを組み合わせる方法|サブクエリを使った実装手順を解説
MySQLでは、UPDATE文にLIMITを組み合わせることは可能です。特に、更新対象の行を柔軟に制御したい場合は、サブクエリとIN句を組み合わせる方法が便利です。本記事では、実際のコード例を交えながら、LIMITを使って先頭から指定した件数だけレコードを更新する手順を解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。テーブルの作成にはCREATE TABLEコマンドを使用します。 mysql> CREATE table tblUpdateLimit -> ( -> id int, -> name varchar(100) ->
-
【PostgreSQL】MySQLのORDER BY FIELD()関数をシミュレートする方法
MySQLではFIELD()関数を使うことで、特定の値を優先的に並べ替えることができます。しかし、PostgreSQLにはFIELD()関数が存在しないため、同じ動作を実現するにはCASE式を組み合わせる必要があります。この記事では、オンラインコンパイラを使用してPostgreSQLを動作させながら、MySQLのORDER BY FIELD()をシミュレートする具体的な手順を解説します。準備:サンプルテーブルの作成まず、デモ用のテーブルを作成します。ここでは国名を格納するシンプルなテーブルを用意しました。create table PostgreOrderIdDemo ( country