MySQLでフィールド内の全要素の件数を取得する方法|COUNT()とGROUP BYの使い方
データベースの運用では、「あるカラム(フィールド)に含まれる各値がそれぞれ何回出現するのか」を集計したい場面がよくあります。MySQLでは、COUNT()関数とGROUP BY句を組み合わせることで、このような集計を簡単に行うことができます。
本記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、フィールド内の全要素の件数を取得するクエリを順を追って解説します。
1. サンプルテーブルを作成する
まずは、商品名を格納するシンプルなテーブルを作成します。
mysql> create table DemoTable
-> (
-> ProductName varchar(100)
-> );
Query OK, 0 rows affected (0.59 sec)
「ProductName」というvarchar型のカラムを1つだけ持つテーブル「DemoTable」が作成されました。
2. テストデータを挿入する
次に、INSERT文を使って複数のレコードを挿入します。あとで集計結果がわかりやすいように、同じ商品名を意図的に重複させて登録します。
mysql> insert into DemoTable values('Product-1');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable values('Product-2');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Product-3');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Product-3');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable values('Product-2');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Product-4');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Product-5');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Product-1');
Query OK, 1 row affected (0.11 sec)合計8件のレコードを挿入しました。この時点で、Product-1〜3はそれぞれ2回ずつ、Product-4と5は1回ずつ登録されている状態です。
3. 登録したデータを確認する
SELECT文ですべてのレコードを表示して、挿入されたデータを確認してみましょう。
mysql> select *from DemoTable;
出力結果
+-------------+
| ProductName |
+-------------+
| Product-1 |
| Product-2 |
| Product-3 |
| Product-3 |
| Product-2 |
| Product-4 |
| Product-5 |
| Product-1 |
+-------------+
8 rows in set (0.00 sec)
8件のレコードが正しく登録されていることが確認できます。
4. COUNT()とGROUP BYで各要素の件数を取得する
それが本題となる、フィールド内の全要素の件数を取得するクエリです。COUNT()関数で各行をカウントし、GROUP BY句で同じ値ごとにグループ化することで、要素別の出現回数を求められます。
mysql> select ProductName,count(ProductName) as TotalCount from DemoTable group by ProductName;
ポイントは以下の通りです。
- count(ProductName):ProductNameの値が登場した回数を数えます。
- as TotalCount:集計結果のカラムに「TotalCount」という別名を付けて、見やすくしています。
- group by ProductName:同じ商品名を持つ行を1つのグループにまとめます。
出力結果
+-------------+------------+
| ProductName | TotalCount |
+-------------+------------+
| Product-1 | 2 |
| Product-2 | 2 |
| Product-3 | 2 |
| Product-4 | 1 |
| Product-5 | 1 |
+-------------+------------+
5 rows in set (0.05 sec)
実行結果を見ると、重複を除いた5種類の商品名と、それぞれの出現回数が一覧で表示されました。Product-1〜3は2回、Product-4と5は1回ずつ登録されており、先ほど挿入したデータと一致しています。
まとめ
フィールド内の全要素の件数を取得したい場合は、COUNT()関数とGROUP BY句を組み合わせるのが基本のアプローチです。このパターンは、売上データの商品別集計やログ解析など、さまざまな場面で応用できる非常に重要なテクニックなので、ぜひマスターしておきましょう。
-
MySQLクエリで配列の要素をすべて一致させる方法
MySQLでは、WHERE IN句とGROUP BY、HAVING句を組み合わせることで、指定した配列(複数の値)のすべての要素に一致するレコードを持つIDを抽出できます。この記事では、具体的なサンプルを使ってその手順を解説します。 1. サンプルテーブルを作成する まず、以下のコマンドでテーブル「DemoTable1523」を作成します。 mysql> create table DemoTable1523 -> ( -> Id int, -> Value int -> ); Query OK, 0 rows affected (
-
MySQLで最も出現回数の多い値を取得する方法(ORDER BY COUNT(*)の使い方)
MySQLでカウント(出現回数)が最も多い値を取得する方法MySQLで特定のフィールドに出現回数が最も多い値を取得したい場合は、GROUP BYとORDER BY COUNT(*)を組み合わせます。この記事では、実際にテーブルを作成しながら、その手順をサンプルコード付きでわかりやすく解説します。1. サンプルテーブルの作成まず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1940 ( FirstName varchar(20) ); Query OK, 0 rows affected (0.00 se