MySQLで複数の行をカウントし、結果を異なる列(1行)に表示する方法
はじめに
MySQLでは、条件付きのSUM関数を活用することで、複数の行をそれぞれカウントし、その結果を異なる列に横並び(1行)で表示できます。この記事では、色ごとのデータ件数を集計する例をもとに、具体的な手順をわかりやすく解説します。
サンプルテーブルを作成する
まず、以下のコマンドでテーブルを作成します。ここでは、お気に入りの色を格納する「FavouriteColor」列を持つテーブルを用意しました。
mysql> create table DemoTable1452
-> (
-> FavouriteColor varchar(50)
-> );
Query OK, 0 rows affected (2.42 sec)
テーブルにレコードを挿入する
次に、INSERT文を使ってサンプルデータを挿入します。「Red」「Yellow」「Blue」の3種類の色を登録していきます。
mysql> insert into DemoTable1452 values('Red');
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable1452 values('Yellow');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1452 values('Yellow');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1452 values('Yellow');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable1452 values('Blue');
Query OK, 1 row affected (0.42 sec)
mysql> insert into DemoTable1452 values('Blue');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable1452 values('Red');
Query OK, 1 row affected (0.29 sec)登録したレコードを確認する
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。
mysql> select * from DemoTable1452;
実行すると、次のような出力が得られます。
+----------------+
| FavouriteColor |
+----------------+
| Red |
| Yellow |
| Yellow |
| Yellow |
| Blue |
| Blue |
| Red |
+----------------+
7 rows in set (0.00 sec)
色ごとの件数を異なる列に表示するクエリ
ここが本題です。複数の行をカウントし、結果を異なる列として1行に表示するには、SUM関数の中に比較条件を記述します。MySQLでは、条件が真(TRUE)の場合は「1」、偽(FALSE)の場合は「0」と評価されるため、SUMで合計すると該当件数を求められます。
mysql> select sum(FavouriteColor='Red') as NumberOfRedColor,
-> sum(FavouriteColor='Yellow') as NumberOfYellowColor,
-> sum(FavouriteColor='Blue') as NumberOfBlueColor
-> from DemoTable1452;
実行結果
上記のクエリを実行すると、各色の件数がそれぞれ独立した列に表示されます。
+------------------+---------------------+-------------------+
| NumberOfRedColor | NumberOfYellowColor | NumberOfBlueColor |
+------------------+---------------------+-------------------+
| 2 | 3 | 2 |
+------------------+---------------------+-------------------+
1 row in set (0.27 sec)
まとめ
このように、SUM関数と条件式を組み合わせることで、GROUP BYを使わずに複数の集計結果を1行・複数列の形式で取得できます。ダッシュボードやレポートなど、横持ち形式の集計結果が必要な場面で非常に便利なテクニックなので、ぜひ覚えておきましょう。なお、CASE式を使った「COUNT(CASE WHEN ... THEN 1 END)」の方法でも同様の結果が得られます。
-
MySQLで重複するIDをカウントし、結果を別の列に表示する方法
MySQLでは、GROUP BY句とCOUNT(DISTINCT)関数を組み合わせることで、重複するIDごとにデータを集計し、その結果を別の列として表示できます。この記事では、実際のSQL例を使って手順をわかりやすく解説します。 1. サンプルテーブルを作成する まず、テーブルを作成しましょう。 mysql> create table DemoTable1453 -> ( -> CustomerId int, -> Custom
-
MySQLで複数の行・列を1行に連結する方法:GROUP_CONCATとCONCATの使い方
MySQLでは、GROUP_CONCAT()関数とCONCAT()関数を組み合わせることで、複数の行や列のデータを1つの行に連結できます。この記事では、実際のテーブル作成から連結クエリの実行まで、手順を追って解説します。サンプルテーブルの作成まず、デモ用のテーブルを作成します。顧客ID、氏名、年齢を持つシンプルなテーブルです。mysql> create table DemoTable1463 -> ( -> ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> ClientName varcha