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

MySQLの単一クエリで条件に応じてSUMと減算を実行する方法

はじめに

MySQLで条件に応じて同じカラムに対してSUM(合計)と減算を同時に行いたい場合は、CASE文を使用します。CASE文の中で、特定の条件を満たす場合には金額をそのまま加算し、別の条件の場合はマイナス値にすることで減算として処理できます。

まず、サンプルとなるテーブルを作成しましょう。

mysql> create table DemoTable866(
Status varchar(100),
Amount int
);
Query OK, 0 rows affected (0.63 sec)

insertコマンドを使って、いくつかのレコードを挿入します。

mysql> insert into DemoTable866 values('ACTIVE',50);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable866 values('INACTIVE',70);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable866 values('INACTIVE',20);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable866 values('ACTIVE',100);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable866 values('ACTIVE',200);
Query OK, 1 row affected (0.11 sec)

selectステートメントでテーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable866;

以下のような出力が得られます。

+----------+--------+
| Status | Amount |
+----------+--------+
| ACTIVE | 50 |
| INACTIVE | 70 |
| INACTIVE | 20 |
| ACTIVE | 100 |
| ACTIVE | 200 |
+----------+--------+
5 rows in set (0.00 sec)

単一クエリでSUMと減算を実行する

次のクエリでは、CASE文を使ってStatusが「ACTIVE」の場合はAmountをそのまま加算し、「INACTIVE」の場合は-Amountとして減算しています。これにより、1つのSELECT文だけで加算と減算を同時に処理できます。

mysql> select sum(CASE WHEN Status = 'ACTIVE' then Amount
WHEN Status = 'INACTIVE' then -Amount
END) AS RemainingAmount
from DemoTable866;

実行結果は以下の通りです。

+-----------------+
| RemainingAmount |
+-----------------+
| 260 |
+-----------------+
1 row in set (0.06 sec)

結果の解説

この例では、ACTIVEレコードの合計金額(50 + 100 + 200 = 350)から、INACTIVEレコードの合計金額(70 + 20 = 90)が差し引かれ、結果として残高「260」が算出されています。

このようにCASE文とSUM関数を組み合わせることで、複数回のクエリを実行したり、アプリケーション側で計算したりする必要がなく、効率的に集計処理を行うことが可能です。在庫管理や残高計算など、ステータスに応じて金額の増減を扱う場面で非常に役立つテクニックです。

  1. MySQLで行の値を合計して結果を並べ替えるクエリの書き方

    MySQLで行の値を合計し、結果を並べ替える方法テーブル内の同じキーを持つ行の値を合計し、その結果を並べ替えたい場合には、GROUP BY句とORDER BY句を組み合わせて使用します。GROUP BYで対象の列ごとにデータをグループ化し、SUM関数で合計値を算出した後、ORDER BYで並べ替えるという流れになります。ここでは、生徒名と点数が登録されたテーブルを例に、生徒ごとの合計点を降順で取得する手順を解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1499 &nb

  2. MySQLでSUM関数とFORMAT関数を組み合わせて集計結果をフォーマットする方法

    MySQLでは、SUM()関数とFORMAT()関数を組み合わせることで、数値カラムの合計値を計算しつつ、結果を見やすい形式(桁区切りのカンマ付き・小数点以下の桁数指定)で表示できます。この記事では、実際にテーブルを作成し、データを挿入してから、SUM と FORMAT を組み合わせたクエリの実行方法を順を追って解説します。 1. テーブルの作成 まず、CREATE TABLE 文を使ってサンプル用のテーブルを作成します。ここでは、金額を格納する Amount カラム(FLOAT 型)を1つだけ持つシンプルなテーブルを用意しました。 mysql> create table DemoTa