MySQLでIdとFileIDを持つテーブルから各FileIDの出現回数を取得するクエリ
MySQLでは、GROUP BY句とCOUNT()関数を組み合わせることで、テーブル内の各FileIDエントリが何件ずつ存在するかを簡単に集計できます。ここでは、IdとFileIDの2つのカラムを持つテーブルを例に、その手順を解説します。
1. サンプルテーブルの作成
まず、Id(自動採番の主キー)とFileIDを持つテーブルを作成します。
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FileID int
) AUTO_INCREMENT=100;
Query OK, 0 rows affected (1.36 sec)
AUTO_INCREMENT=100 を指定することで、Idは100から始まります。
2. テストデータの挿入
INSERTコマンドを使って、いくつかのレコードを挿入します。
mysql> insert into DemoTable(FileID) values(50); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable(FileID) values(60); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable(FileID) values(50); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable(FileID) values(70); Query OK, 1 row affected (0.25 sec) mysql> insert into DemoTable(FileID) values(60); Query OK, 1 row affected (0.28 sec) mysql> insert into DemoTable(FileID) values(50); Query OK, 1 row affected (0.32 sec)
3. 挿入したデータの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+-----+---------+ | Id | FileID | +-----+---------+ | 100 | 50 | | 101 | 60 | | 102 | 50 | | 103 | 70 | | 104 | 60 | | 105 | 50 | +-----+---------+ 6 rows in set (0.00 sec)
この時点で、FileID「50」が3件、「60」が2件、「70」が1件登録されていることがわかります。
4. 各FileIDの出現回数を取得するクエリ
各FileIDエントリのカウントを取得するには、GROUP BY句でFileIDごとにレコードをグループ化し、COUNT()関数で件数を数えます。
mysql> select FileID,COUNT(FieldId) AS EntryCount from DemoTable group by FileID;
実行結果:
+---------+------------+ | FileID | EntryCount | +---------+------------+ | 50 | 3 | | 60 | 2 | | 70 | 1 | +---------+------------+ 3 rows in set (0.00 sec)
ポイント解説
- COUNT(FieldId) AS EntryCount: 集計結果に「EntryCount」という別名を付けて、読みやすい出力にしています。
- GROUP BY FileID: 同じFileIDの値を持つレコードを1つのグループにまとめます。
- ORDER BYとの併用: 結果を件数順に並べたい場合は、「order by EntryCount desc」を追加すると便利です。
このように、GROUP BYとCOUNT()を組み合わせれば、特定のカラムにおける各値の出現回数をシンプルなクエリで集計できます。ログ解析やファイル管理テーブルでの重複チェックなど、さまざまな場面で活用できる基本テクニックなので、ぜひ覚えておきましょう。
-
【MySQL入門】1つのクエリで複数の条件別レコード数を取得する方法(CASE式とSUMの活用)
MySQLでは、CASE式とSUM()関数を組み合わせることで、1つのクエリだけで複数の条件に一致するレコード数を同時に取得できます。この記事では、従業員の性別(Male/Female)を格納したカラムを例に、男性従業員数と女性従業員数を1回のクエリで集計する手順を解説します。 サンプルテーブルの作成 まず、性別を格納するためのENUM型カラムを持つテーブルを作成します。 mysql> create table DemoTable ( EmployeeGender ENUM(Male,Female) ); Query OK, 0 rows affected (0.52 sec)
-
「order」というテーブル名でMySQLクエリエラーが発生する原因と解決方法
「order」は予約語であることに注意MySQLでは「order」は予約語(ORDER BY句などで使用されるキーワード)として登録されています。そのため、予約語をそのままテーブル名として使用しようとすると、構文エラーが発生します。予約語をテーブル名やカラム名として使いたい場合は、バッククォート(`)で囲む必要があります。テーブルの作成まず、バッククォートで「order」というテーブルを作成してみましょう。mysql> create table `order` -> ( -> StudentId int -> ); Query OK, 0 row