MySQLのCASE文を使ってAmount列から条件別に2種類の合計値を同時に取得する方法
MySQLでは、CASE文を活用することで、1つのクエリ内で異なる条件ごとの合計値を複数同時に算出できます。例えば、Amount(金額)列から「全体の合計」と「特定条件を満たすレコードのみの合計」を一度に表示したい場合に非常に便利です。
ここでは、具体的な手順をサンプルとともに解説します。
1. サンプルテーブルの作成
まず、テーブルを作成します。
mysql> create table DemoTable1794
(
Amount int
);
Query OK, 0 rows affected (0.00 sec)2. テストデータの挿入
INSERTコマンドを使って、いくつかのレコードを挿入します。
mysql> insert into DemoTable1794 values(100); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1794 values(80); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1794 values(320); Query OK, 1 row affected (0.00 sec)
3. データの確認
SELECT文でテーブル内の全レコードを表示して確認しましょう。
mysql> select * from DemoTable1794;
実行すると、次のような結果が得られます。
+--------+ | Amount | +--------+ | 100 | | 80 | | 320 | +--------+ 3 rows in set (0.00 sec)
4. CASE文を使って2種類の合計を同時に表示する
以下のクエリでは、SUM(Amount)で全体の合計を求めつつ、CASE文によって「150未満の金額だけを合計した値」をSecondAmountという別名カラムとして同時に表示しています。
mysql> select sum(Amount),
sum( case when Amount < 150 then Amount else 0 end ) as SecondAmount
from DemoTable1794;実行結果は以下の通りです。
+-------------+--------------+ | sum(Amount) | SecondAmount | +-------------+--------------+ | 500 | 180 | +-------------+--------------+ 1 row in set (0.00 sec)
実行結果の解説
- sum(Amount):500 — 全レコード(100 + 80 + 320)の合計値です。
- SecondAmount:180 —
CASE文により、150未満の金額(100 + 80)のみが合計され、それ以外は0として扱われた結果です。
このようにCASE文をSUM関数と組み合わせれば、GROUP BYで分けることなく、1回のクエリで複数の条件別合計を効率的に取得できます。条件を変更すれば、「特定金額以上」「特定範囲内」など、さまざまな集計にも応用可能です。
-
MySQLでGROUP BYとGROUP_CONCATを使って各グループのレコード数とID一覧を1行で表示する方法
MySQLでは、GROUP_CONCAT()とCOUNT()、さらにGROUP BY句を組み合わせることで、同じ値を持つ複数のレコードを1行にまとめ、その件数と一緒に表示することができます。本記事では、実際にテーブルを作成し、データを挿入したうえで、グループごとのレコード数とIDの一覧を取得する手順を解説します。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable -> ( -> CompanyId int NOT
-
MySQLで条件に応じて同じ列の2つの値を連結する方法
MySQLで条件に応じて同じ列の2つの値を連結する方法 MySQLでは、max() などの集計関数と CASE 式を組み合わせることで、条件の異なる同じ列の値を1つの文字列として連結できます。この記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、create table コマンドでテーブルを作成しましょう。 mysql> create table DemoTable1869 ( Id int, &nb