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

MySQLでフィールドの値に応じて合計を計算する方法

MySQLでフィールド値に基づいて合計するには?

MySQLでは、フィールド(カラム)の値に応じて異なる列の値を合計したい場合、集計関数 SUM()CASE 文を組み合わせることで実現できます。この記事では、実際のテーブル作成からクエリ実行までの手順を順番に解説します。

1. テーブルを作成する

まず、サンプル用のテーブルを作成します。

mysql> create table DemoTable
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Price int,
    isValidCustomer boolean,
    FinalPrice int
    );
Query OK, 0 rows affected (0.23 sec)

このテーブルは、通常価格(Price)、有効な顧客かどうかを示すフラグ(isValidCustomer)、最終価格(FinalPrice)を持っています。

2. レコードを挿入する

次に、INSERTコマンドを使ってテーブルにデータを追加します。

mysql> insert into DemoTable(Price,isValidCustomer,FinalPrice) values(20,false,40);
Query OK, 1 row affected (0.09 sec)

mysql> insert into DemoTable(Price,isValidCustomer,FinalPrice) values(45,true,10);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable(Price,isValidCustomer,FinalPrice) values(89,true,50);
Query OK, 1 row affected (0.09 sec)

mysql> insert into DemoTable(Price,isValidCustomer,FinalPrice) values(200,false,100);
Query OK, 1 row affected (0.06 sec)

3. テーブルの内容を確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

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

+----+-------+-----------------+------------+
| Id | Price | isValidCustomer | FinalPrice |
+----+-------+-----------------+------------+
| 1  | 20    | 0               | 40         |
| 2  | 45    | 1               | 10         |
| 3  | 89    | 1               | 50         |
| 4  | 200   | 0               | 100        |
+----+-------+-----------------+------------+
4 rows in set (0.00 sec)

4. フィールド値に応じて合計するクエリ

ここが本題です。以下のクエリでは、isValidCustomer の値によって合計対象の列を切り替えています。TRUE(1)の場合は Price を、FALSE(0)の場合は FinalPrice を加算します。

mysql> select sum(case when isValidCustomer=true then Price else FinalPrice end) as TotalPrice from DemoTable;

実行すると、次のような結果が得られます。

+------------+
| TotalPrice |
+------------+
| 274        |
+------------+
1 row in set (0.00 sec)

仕組みの解説

CASE 文は各行ごとに評価され、条件(isValidCustomer=true)が成立すれば Price の値を、成立しなければ FinalPrice の値を返します。その後、SUM() 関数がそれらの戻り値をすべて合計します。

今回の例では、TRUEの行(Id: 2, 3)からは Price の 45 と 89 が、FALSEの行(Id: 1, 4)からは FinalPrice の 40 と 100 が加算され、45 + 89 + 40 + 100 = 274 という結果になります。

このように SUM()CASE を組み合わせる手法は、条件付き集計を行う際の定番パターンです。売上レポートや在庫管理など、さまざまな場面で活用できるので、ぜひ覚えておきましょう。

  1. MySQLで条件に基づいて列の値を合計する方法(SUM句とWHERE句の使い方)

    MySQLでは、SUM()関数とWHERE句を組み合わせることで、特定の条件を満たすレコードだけを対象に列の合計値を簡単に求めることができます。本記事では、実際にテーブルを作成し、データを挿入してから、条件に基づいた合計を取得する手順を詳しく解説します。 1. テーブルの作成 まず、サンプル用のテーブルを作成します。以下のコマンドを実行してください。 mysql> create table DemoTable ( CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY, ProductAmount int, Custo

  2. MySQLで他のカラムの値から新しいカラムの値を導出する方法

    MySQLではユーザー定義変数(ユーザー変数)を活用することで、既存のカラムの値をもとに別のカラムの値を計算・導出できます。本記事では、累積和(累積合計)を求める具体例を通して、その方法をわかりやすく解説します。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1868 ( Value int ); Query OK, 0 rows affected (0.00 sec)レコードの挿入insertコマンドを使って、テーブルにデータを挿入します。mysql> insert into DemoTable1