【MySQL】特定のレコードの値を0(ゼロ)まで減らすクエリの書き方
特定のレコードの値を0まで減らすには
MySQLで特定のレコードの値を減算し、0(ゼロ)に到達させたい場合は、UPDATE文のSET句を使って値を減らし、WHERE句で対象レコードの条件を指定します。このとき「Number > 0」という条件を加えておくことで、すでに0以下のレコードが誤ってさらに減算されるのを防げます。
ここでは、Id=3 のレコードの値を1つずつ減らして0にする具体例を見ていきましょう。
1. テーブルを作成する
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Number int ); Query OK, 0 rows affected (0.54 sec)
2. レコードを挿入する
INSERT文を使って、いくつかのレコードを追加します。
mysql> insert into DemoTable(Number) values(10); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable(Number) values(20); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable(Number) values(1); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable(Number) values(0); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable(Number) values(-1); Query OK, 1 row affected (0.39 sec)
3. テーブルの中身を確認する
SELECT文ですべてのレコードを表示します。
mysql> select *from DemoTable;
実行結果は以下のとおりです。
+----+--------+ | Id | Number | +----+--------+ | 1 | 10 | | 2 | 20 | | 3 | 1 | | 4 | 0 | | 5 | -1 | +----+--------+ 5 rows in set (0.00 sec)
4. 値を減算して0にするUPDATEクエリ
ここが本題です。次のクエリを実行すると、Id=3 のレコードの値が1減って0になります。
mysql> update DemoTable set Number = Number-1 where Id = 3 AND Number > 0; Query OK, 1 row affected (0.20 sec) Rows matched: 1 Changed: 1 Warnings: 0
ポイントは、WHERE句に 「Id = 3 AND Number > 0」 という2つの条件を組み合わせている点です。これにより、対象のレコードだけが更新され、かつ値が正の場合にのみ減算が行われます。
5. 更新後の結果を確認する
もう一度テーブルの内容を表示してみましょう。
mysql> select *from DemoTable;
Id=3 のレコードが1減算され、0になっていることが確認できます。
+----+--------+ | Id | Number | +----+--------+ | 1 | 10 | | 2 | 20 | | 3 | 0 | | 4 | 0 | | 5 | -1 | +----+--------+ 5 rows in set (0.00 sec)
まとめ
特定のレコードの値を0まで減らすには、「SET Number = Number-1」で減算を行い、「WHERE Id = 対象ID AND Number > 0」で条件を絞るのが基本形です。「Number > 0」の条件を入れておくことで、マイナス値へのオーバーフロー(減りすぎ)を防ぎ、在庫数やカウンターなどの管理にも安全に活用できます。
-
MySQLで最大の累積値とその出現回数を取得するクエリの書き方
カラム同士を掛け合わせた値(累積値)の中から最大値と、その出現回数を取得したい場合は、集計関数 COUNT(*) をサブクエリと組み合わせて使用します。あわせて GROUP BY 句も活用します。テーブルの作成まず、以下のコマンドでテーブルを作成しましょう。mysql> create table demo23-> (-> id int not null auto_increment primary key,-> value1 int,-> value2 int-> );Query OK, 0 rows affected (1.65 sec)レコードの挿入続い
-
MySQLで特定の値より大きいレコードだけを抽出する方法|WHERE句を使った条件指定の基本
MySQLで特定の値以下のレコードを除外するには? MySQLである値を基準に、それより小さいレコードを除外し、大きい値を持つレコードだけを取得したい場合は、WHERE句に比較演算子「>(より大きい)」を組み合わせるのが基本です。 基本構文 SELECT * FROM テーブル名 WHERE カラム名 > 値; この構文により、指定したカラムの値が条件値より大きい行のみが結果セットとして返されます。 実際に試してみよう:サンプルテーブルの作成 まずは動作を確認するためのテーブルを作成します。 mysql> create table demo27 -> ( ->