MySQLで1つのクエリを使って複数商品の価格を一括更新する方法(CASE文の活用)
MySQLでは、CASE文を使うことで、1つのUPDATEクエリだけで複数の商品価格をそれぞれ異なる割合で一括更新できます。条件ごとに個別にSQLを実行する必要がないため、処理がシンプルになり、パフォーマンス面でも有利です。
ここでは、実際にテーブルを作成し、複数の商品価格を一度に値上げする手順を解説します。
1. テーブルの作成
まず、商品名と商品価格を格納するテーブルを作成します。
mysql> create table DemoTable
-> (
-> ProductName varchar(20),
-> ProductPrice int
-> );
Query OK, 0 rows affected (0.51 sec)
2. レコードの挿入
INSERTコマンドを使って、サンプルデータを登録します。
mysql> insert into DemoTable values('Product-1',700);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Product-2',1000);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Product-3',3000);
Query OK, 1 row affected (0.10 sec)3. 登録データの確認
SELECT文で全レコードを表示して、現在の状態を確認しておきましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+-------------+--------------+
| ProductName | ProductPrice |
+-------------+--------------+
| Product-1 | 700 |
| Product-2 | 1000 |
| Product-3 | 3000 |
+-------------+--------------+
3 rows in set (0.00 sec)
4. CASE文で複数商品の価格を一括更新
ここが本題です。以下のようにCASE文を組み合わせることで、商品ごとに異なる値上げ率(20%・40%・60%)を1つのUPDATEクエリで適用できます。
mysql> update DemoTable
-> set ProductPrice=
-> case when ProductName='Product-1' then ProductPrice+((ProductPrice*20)/100)
-> when ProductName='Product-2' then ProductPrice+((ProductPrice*40)/100)
-> when ProductName='Product-3' then ProductPrice+((ProductPrice*60)/100)
-> end;
Query OK, 3 rows affected (0.14 sec)
Rows matched: 3 Changed: 3 Warnings: 0
5. 更新後のデータ確認
もう一度SELECT文を実行して、更新結果を確認してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+-------------+--------------+
| ProductName | ProductPrice |
+-------------+--------------+
| Product-1 | 840 |
| Product-2 | 1400 |
| Product-3 | 4800 |
+-------------+--------------+
3 rows in set (0.00 sec)
解説とポイント
実行結果を見ると、各商品の価格が意図した通りに更新されていることがわかります。
- Product-1: 700円 → 840円(20%アップ)
- Product-2: 1000円 → 1400円(40%アップ)
- Product-3: 3000円 → 4800円(60%アップ)
CASE文は、WHEN句で指定した条件に一致した場合にTHEN句の値を返す仕組みです。この例ではProductNameごとに異なる計算式を適用しています。なお、どのWHEN条件にも一致しないレコードが存在する場合、ELSE句を指定しないとNULLがセットされてしまうため、実務では「ELSE ProductPrice」のように元の値を維持するELSE句を追加しておくと安全です。
-
MySQLのUPDATE文で1つのクエリを使って複数のレコードを更新する方法
MySQLでは、UPDATEステートメントを使うことで、1つのクエリで複数のカラムや複数のレコードの値をまとめて更新できます。この記事では、実際にサンプルテーブルを作成し、UPDATE文でデータを更新する具体的な手順を解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, &
-
【MySQL】SUM()関数を使って単一クエリで特定の列値ごとの複数カウントを取得する方法
特定の列値に基づくカウントを1つのMySQLクエリで複数取得するには、集計関数SUM()を活用します。MySQLでは「列 = 値」という条件式が真なら1、偽なら0を返すため、その結果をSUM()で合計することで、条件に一致する行数を数えられます。まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable1790 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Score int ); Query OK, 0 rows af