MySQLで結果をグループ化して一覧表示する方法
GROUP BYとORDER BYを使った集計クエリの基本
MySQLでデータを特定のカラムごとにグループ化し、その件数を一覧形式で表示したい場合は、GROUP BY句とORDER BY句を組み合わせて使用します。基本的な構文は以下の通りです。
SELECT yourColumnName, COUNT(*) AS anyAliasName
FROM yourTableName
GROUP BY yourColumnName
ORDER BY yourColumnName;
COUNT(*)で各グループのレコード数を数え、別名(エイリアス)を付けることで、結果を見やすく表示できます。
サンプルテーブルの作成
まずは動作確認用のテーブルを作成しましょう。
mysql> CREATE TABLE demo7
-> (
-> id INT NOT NULL AUTO_INCREMENT,
-> first_name VARCHAR(50),
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (1.22 sec)
テストデータの挿入
次に、INSERTコマンドを使って複数のレコードを挿入します。意図的に同じ名前を重複させて登録しています。
mysql> INSERT INTO demo7(first_name) VALUES('John');
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO demo7(first_name) VALUES('David');
Query OK, 1 row affected (0.22 sec)
mysql> INSERT INTO demo7(first_name) VALUES('John');
Query OK, 1 row affected (0.07 sec)
mysql> INSERT INTO demo7(first_name) VALUES('Bob');
Query OK, 1 row affected (0.27 sec)
mysql> INSERT INTO demo7(first_name) VALUES('David');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO demo7(first_name) VALUES('David');
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO demo7(first_name) VALUES('John');
Query OK, 1 row affected (0.26 sec)
mysql> INSERT INTO demo7(first_name) VALUES('John');
Query OK, 1 row affected (0.09 sec)登録済みレコードの確認
SELECT文でテーブルの中身を確認します。
mysql> SELECT * FROM demo7;
実行すると、以下のような出力が得られます。
+----+------------+
| id | first_name |
+----+------------+
| 1 | John |
| 2 | David |
| 3 | John |
| 4 | Bob |
| 5 | David |
| 6 | David |
| 7 | John |
| 8 | John |
+----+------------+
8 rows in set (0.00 sec)
グループ化して件数を一覧表示する
ここからが本題です。first_nameカラムでグループ化し、それぞれの名前が出現した回数を「frequency」という別名で表示するクエリは以下のようになります。
mysql> SELECT first_name, COUNT(*) AS frequency FROM demo7 GROUP BY first_name ORDER BY first_name;
実行結果は次の通りです。
+------------+-----------+
| first_name | frequency |
+------------+-----------+
| Bob | 1 |
| David | 3 |
| John | 4 |
+------------+-----------+
3 rows in set (0.00 sec)
まとめ
GROUP BY句によって同じ値を持つレコードがまとめられ、COUNT(*)で各グループの件数を取得できます。さらにORDER BYを加えることで、結果を名前順にソートして表示できるため、集計結果が非常に読みやすくなります。この手法は、アンケート集計やアクセスログ分析など、カテゴリ別の出現回数を調べたい場面で幅広く活用できます。
-
MySQLでレコードのリストから特定の値を検索して置換する方法
MySQLでは、カンマ区切りで保存された文字列の中から特定の値を検索し、別の値に置き換えることができます。本記事では、SUBSTRING_INDEX() 関数と CONCAT() 関数を組み合わせたUPDATE文を使って、名前のリストから特定のレコードを置換する手順を解説します。テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> ListOfName text -> );Query OK, 0 rows affected (0.66 sec)レコードの挿入INSERTコマンド
-
MySQLでSUM関数とFORMAT関数を組み合わせて集計結果をフォーマットする方法
MySQLでは、SUM()関数とFORMAT()関数を組み合わせることで、数値カラムの合計値を計算しつつ、結果を見やすい形式(桁区切りのカンマ付き・小数点以下の桁数指定)で表示できます。この記事では、実際にテーブルを作成し、データを挿入してから、SUM と FORMAT を組み合わせたクエリの実行方法を順を追って解説します。 1. テーブルの作成 まず、CREATE TABLE 文を使ってサンプル用のテーブルを作成します。ここでは、金額を格納する Amount カラム(FLOAT 型)を1つだけ持つシンプルなテーブルを用意しました。 mysql> create table DemoTa