MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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 を組み合わせるだけで、簡単に最頻値の出現回数を集計できます。ログ解析やカテゴリ別の統計処理など、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。

  1. 複数のMySQLクエリを1つにまとめて、異なる列ごとの特定値の出現回数を取得する方法

    MySQLでは、SUM()関数と条件式を組み合わせることで、複数のクエリを1つのクエリに統合し、異なる列に含まれる特定の値の出現回数を一度に取得できます。この記事では、具体的な手順をサンプルコード付きで解説します。 テーブルの作成 まず、サンプル用のテーブルを作成します。 mysql> create table DemoTable760 (     ClientId int,     ClientId2 int ); Query OK, 0 rows affected (0.79 sec) レコードの挿入

  2. MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方

    MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829      (      Name varchar(