MySQLで最も頻繁に出現する値の件数を取得する方法
MySQLで最も頻繁に出現する値とその出現回数を取得するには、集計関数 COUNT() と GROUP BY を組み合わせて使用します。この記事では、実際にテーブルを作成し、データを挿入して、出現頻度を求めるクエリの実行方法を順を追って解説します。
1. テーブルの作成
まず、以下のコマンドでサンプル用のテーブルを作成します。
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value int
);
Query OK, 0 rows affected (0.74 sec)Id 列は自動採番(AUTO_INCREMENT)の主キー、Value 列には任意の数値が格納されるシンプルな構造です。
2. テストデータの挿入
次に、INSERTコマンドを使って複数のレコードを挿入します。意図的に同じ値を重複させて登録している点に注目してください。
mysql> insert into DemoTable(Value) values(976); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable(Value) values(67); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable(Value) values(67); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable(Value) values(1); Query OK, 1 row affected (0.27 sec) mysql> insert into DemoTable(Value) values(90); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable(Value) values(1); Query OK, 1 row affected (0.41 sec) mysql> insert into DemoTable(Value) values(67); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable(Value) values(976); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable(Value) values(90); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable(Value) values(1); Query OK, 1 row affected (0.23 sec) mysql> insert into DemoTable(Value) values(10); Query OK, 1 row affected (0.09 sec)
3. 登録されたデータの確認
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。
mysql> select *from DemoTable;
実行結果
+----+-------+ | Id | Value | +----+-------+ | 1 | 976 | | 2 | 67 | | 3 | 67 | | 4 | 1 | | 5 | 90 | | 6 | 1 | | 7 | 67 | | 8 | 976 | | 9 | 90 | | 10 | 1 | | 11 | 10 | +----+-------+ 11 rows in set (0.00 sec)
合計11件のレコードが登録されていることがわかります。
4. 最も頻繁に出現する値の件数を取得するクエリ
それが本題です。Value 列の値ごとに出現回数をカウントし、頻度の高い順に並べ替えるには、以下のクエリを実行します。
mysql> select Value,COUNT(Value) AS ValueFrequency from DemoTable group by Value order by ValueFrequency DESC;
このクエリのポイントは次のとおりです。
GROUP BY Value: 同じ値を持つレコードをグループ化します。
COUNT(Value) AS ValueFrequency: 各グループのレコード数(出現回数)をカウントし、別名を付けて見やすくします。
ORDER BY ValueFrequency DESC: 出現回数の多い順(降順)に結果を並べ替えます。
実行結果
+-------+----------------+ | Value | ValueFrequency | +-------+----------------+ | 67 | 3 | | 1 | 3 | | 90 | 2 | | 976 | 2 | | 10 | 1 | +-------+----------------+ 5 rows in set (0.09 sec)
結果の読み方
実行結果から、「67」と「1」がそれぞれ3回出現しており、最も頻度の高い値であることがわかります。続いて「90」と「976」が2回、「10」が1回出現しています。
なお、上位1件だけを取得したい場合は、クエリの末尾に LIMIT 1 を追加するだけでOKです。ただしこの例のように同率の最頻値が存在する場合、LIMITでは片方しか取得できないため、用途に応じて使い分けるとよいでしょう。
このように、COUNT() と GROUP BY を組み合わせるだけで、簡単に最頻値の出現回数を集計できます。ログ解析やカテゴリ別の統計処理など、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。
-
複数のMySQLクエリを1つにまとめて、異なる列ごとの特定値の出現回数を取得する方法
MySQLでは、SUM()関数と条件式を組み合わせることで、複数のクエリを1つのクエリに統合し、異なる列に含まれる特定の値の出現回数を一度に取得できます。この記事では、具体的な手順をサンプルコード付きで解説します。 テーブルの作成 まず、サンプル用のテーブルを作成します。 mysql> create table DemoTable760 ( ClientId int, ClientId2 int ); Query OK, 0 rows affected (0.79 sec) レコードの挿入
-
MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方
MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829 ( Name varchar(