MySQLで出現回数をカウントする方法|COUNT()とGROUP BYの使い方
テーブル内の各値の出現回数(発生件数)を調べたい場合は、集計関数であるCOUNT()とGROUP BY句を組み合わせて使用します。この組み合わせにより、特定のカラムに含まれる値ごとに、その値が何回登場したかを一括して集計できます。
基本構文
出現回数をカウントするための基本的なSQL構文は以下の通りです。
SELECT yourColumnName, COUNT(*) AS anyVariableName FROM yourTableName GROUP BY yourColumnName;
GROUP BYで指定したカラムの値ごとに行がグループ化され、COUNT(*)がそれぞれのグループ内の行数、つまり出現回数を返します。
サンプルテーブルの作成
実際に動作を確認するために、まずテーブルを作成しましょう。テーブル作成のクエリは次の通りです。
mysql> create table CountOccurrences
-> (
-> CarId int not null auto_increment,
-> CarName varchar(30),
-> PRIMARY KEY(CarId)
-> );
Query OK, 0 rows affected (0.68 sec)ここでは、自動採番される「CarId」と車名を格納する「CarName」の2つのカラムを持つテーブルを作成しています。
レコードの挿入
次に、INSERT文を使ってサンプルデータを挿入します。同じ車名を意図的に複数回登録している点に注目してください。
mysql> insert into CountOccurrences(CarName) values('Aston Martin');
Query OK, 1 row affected (0.10 sec)
mysql> insert into CountOccurrences(CarName) values('BMW');
Query OK, 1 row affected (0.20 sec)
mysql> insert into CountOccurrences(CarName) values('Aston Martin');
Query OK, 1 row affected (0.15 sec)
mysql> insert into CountOccurrences(CarName) values('Honda');
Query OK, 1 row affected (0.20 sec)
mysql> insert into CountOccurrences(CarName) values('BMW');
Query OK, 1 row affected (0.11 sec)
mysql> insert into CountOccurrences(CarName) values('Audi');
Query OK, 1 row affected (0.18 sec)
mysql> insert into CountOccurrences(CarName) values('Aston Martin');
Query OK, 1 row affected (0.11 sec)
mysql> insert into CountOccurrences(CarName) values('Bugatti');
Query OK, 1 row affected (0.22 sec)
mysql> insert into CountOccurrences(CarName) values('BMW');
Query OK, 1 row affected (0.27 sec)
mysql> insert into CountOccurrences(CarName) values('Honda');
Query OK, 1 row affected (0.13 sec)
mysql> insert into CountOccurrences(CarName) values('Audi');
Query OK, 1 row affected (0.13 sec)
mysql> insert into CountOccurrences(CarName) values('BMW');
Query OK, 1 row affected (0.12 sec)登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from CountOccurrences;
実行結果は以下の通りです。
+-------+--------------+ | CarId | CarName | +-------+--------------+ | 1 | Aston Martin | | 2 | BMW | | 3 | Aston Martin | | 4 | Honda | | 5 | BMW | | 6 | Audi | | 7 | Aston Martin | | 8 | Bugatti | | 9 | BMW | | 10 | Honda | | 11 | Audi | | 12 | BMW | +-------+--------------+ 12 rows in set (0.00 sec)
合計12件のレコードが登録されていることが確認できます。
COUNT()とGROUP BYによる出現回数の集計
それでは本題のクエリです。CarNameごとの出現回数をCOUNT()とGROUP BYを使って集計します。
mysql> select CarName, count(*) as TotalCount from CountOccurrences
-> group by CarName;実行結果は以下の通りです。
+--------------+------------+ | CarName | TotalCount | +--------------+------------+ | Aston Martin | 3 | | BMW | 4 | | Honda | 2 | | Audi | 2 | | Bugatti | 1 | +--------------+------------+ 5 rows in set (0.00 sec)
結果の読み方
この結果から、以下のことがわかります。
- Aston Martin: 3回出現
- BMW: 4回出現
- Honda: 2回出現
- Audi: 2回出現
- Bugatti: 1回出現
各行の出現回数の合計は3 + 4 + 2 + 2 + 1 = 12となり、先ほど確認した全レコード数と一致します。このように、COUNT()とGROUP BYを組み合わせることで、カテゴリ別の件数集計や頻度分析を簡単に実現できます。
補足:結果を出現回数順に並べ替えるには
出現回数の多い順に表示したい場合は、ORDER BYとDESCを追加します。
select CarName, count(*) as TotalCount from CountOccurrences group by CarName order by TotalCount desc;
これにより、最も多く登場する値から順番に確認できるため、ランキング形式の集計にもそのまま活用できます。
-
MySQLで2つの列の組み合わせごとの出現回数を集計する方法
MySQLでは、GROUP BY句とGREATEST()・LEAST()関数を組み合わせることで、2つの列にまたがる値の組み合わせごとの出現回数を簡単に集計できます。この記事では、具体的なサンプルを使って手順を解説します。1. サンプルテーブルを作成するまず、2つの名前列を持つテーブルを作成します。mysql> create table DemoTable -> ( -> Name1 varchar(20), -> Name2 varchar(20) -> );Query OK, 0 rows affected (0.61 sec)2. テ
-
MySQLでデータベース内のテーブル数を表示するクエリの書き方
INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す