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

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関数と組み合わせると、より意図した形式で出力できます。

  1. MySQLのUPDATE文にLIMITを組み合わせる方法|サブクエリを使った実装手順を解説

    MySQLでは、UPDATE文にLIMITを組み合わせることは可能です。特に、更新対象の行を柔軟に制御したい場合は、サブクエリとIN句を組み合わせる方法が便利です。本記事では、実際のコード例を交えながら、LIMITを使って先頭から指定した件数だけレコードを更新する手順を解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。テーブルの作成にはCREATE TABLEコマンドを使用します。 mysql> CREATE table tblUpdateLimit -> ( -> id int, -> name varchar(100) ->

  2. 【PostgreSQL】MySQLのORDER BY FIELD()関数をシミュレートする方法

    MySQLではFIELD()関数を使うことで、特定の値を優先的に並べ替えることができます。しかし、PostgreSQLにはFIELD()関数が存在しないため、同じ動作を実現するにはCASE式を組み合わせる必要があります。この記事では、オンラインコンパイラを使用してPostgreSQLを動作させながら、MySQLのORDER BY FIELD()をシミュレートする具体的な手順を解説します。準備:サンプルテーブルの作成まず、デモ用のテーブルを作成します。ここでは国名を格納するシンプルなテーブルを用意しました。create table PostgreOrderIdDemo ( country