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 を組み合わせる手法は、条件付き集計を行う際の定番パターンです。売上レポートや在庫管理など、さまざまな場面で活用できるので、ぜひ覚えておきましょう。
-
MySQLで条件に基づいて列の値を合計する方法(SUM句とWHERE句の使い方)
MySQLでは、SUM()関数とWHERE句を組み合わせることで、特定の条件を満たすレコードだけを対象に列の合計値を簡単に求めることができます。本記事では、実際にテーブルを作成し、データを挿入してから、条件に基づいた合計を取得する手順を詳しく解説します。 1. テーブルの作成 まず、サンプル用のテーブルを作成します。以下のコマンドを実行してください。 mysql> create table DemoTable ( CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY, ProductAmount int, Custo
-
MySQLで他のカラムの値から新しいカラムの値を導出する方法
MySQLではユーザー定義変数(ユーザー変数)を活用することで、既存のカラムの値をもとに別のカラムの値を計算・導出できます。本記事では、累積和(累積合計)を求める具体例を通して、その方法をわかりやすく解説します。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1868 ( Value int ); Query OK, 0 rows affected (0.00 sec)レコードの挿入insertコマンドを使って、テーブルにデータを挿入します。mysql> insert into DemoTable1