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

MySQLで最も出現回数の多い値を取得する方法(ORDER BY COUNT(*)の使い方)

MySQLでカウント(出現回数)が最も多い値を取得する方法

MySQLで特定のフィールドに出現回数が最も多い値を取得したい場合は、GROUP BYORDER BY COUNT(*)を組み合わせます。この記事では、実際にテーブルを作成しながら、その手順をサンプルコード付きでわかりやすく解説します。

1. サンプルテーブルの作成

まず、CREATE TABLE文でテーブルを作成します。

mysql> create table DemoTable1940
    (
    FirstName varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

2. レコードの挿入

次に、INSERTコマンドを使ってテーブルにデータを追加します。意図的に同じ値を複数回登録している点に注目してください。

mysql> insert into DemoTable1940 values('Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('Mike');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('Adam');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('Mike');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('David');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('Mike');
Query OK, 1 row affected (0.00 sec)

3. テーブル内の全レコードを確認

SELECT文でテーブル内のすべてのレコードを表示し、登録したデータを確認しましょう。

mysql> select * from DemoTable1940;

実行結果は以下の通りです。

+-----------+
| FirstName |
+-----------+
| Chris     |
| Mike      |
| Adam      |
| Mike      |
| Chris     |
| David     |
| Mike      |
+-----------+
7 rows in set (0.00 sec)

4. 出現回数が最も多い値を取得するクエリ

ここが本題です。以下のクエリを実行すると、カウント(出現回数)が最も多い値を1件だけ取得できます。

mysql> select * from DemoTable1940
    group by FirstName
    order by count(*) desc
    limit 1;

実行結果は以下の通りです。

+-----------+
| FirstName |
+-----------+
| Mike      |
+-----------+
1 row in set (0.00 sec)

クエリの仕組みを解説

このクエリがどのように動作するのか、各句の役割を簡単に整理します。

  • GROUP BY FirstName:FirstNameの値ごとにレコードをグループ化します。
  • ORDER BY count(*) DESC:各グループのレコード数(COUNT(*))を降順に並べ替えます。これにより、出現回数の多い値が先頭に来ます。
  • LIMIT 1:先頭の1件のみを返します。つまり、最も出現回数の多い値だけを取得できます。

今回の例では「Mike」が3回出現しているため、結果として「Mike」が返されました。

応用:出現回数も一緒に表示する

値と出現回数を同時に確認したい場合は、COUNT(*)に別名(エイリアス)を付けてSELECT句に含めると便利です。

mysql> select FirstName, count(*) as cnt
    from DemoTable1940
    group by FirstName
    order by cnt desc
    limit 1;

このように書くことで、「Mike」が3回出現していることが一目でわかります。ランキング形式で上位複数件を表示したい場合は、LIMITの数値を変更するだけで対応できます。

  1. JavaでMySQLテーブルのカラム数を取得・カウントする方法

    MySQLテーブルのカラム(列)数をJavaで取得するには、ResultSetMetaDataインターフェースを使用します。ResultSetMetaDataを活用すれば、カラムの総数だけでなく、各カラムの名前やデータ型といった詳細情報も簡単に取得できます。前提:サンプルテーブルの作成まずは動作確認用のテーブルを作成しましょう。以下のSQLでは、3つのカラムを持つ「DemoTable」を作成しています。mysql> create table DemoTable     -> (     -> St

  2. MySQLのGROUP_CONCATで複数行の値を1つのフィールドにまとめてリストとして取得する方法

    はじめにMySQLでは、複数の行に分かれている値を1つのフィールドに連結したリストとして取得したい場面がよくあります。たとえば、科目ごとに受講している学生名をカンマ区切りでまとめて表示したい場合などです。このような場合は、集約関数のGROUP_CONCAT()を使用することで簡単に実現できます。本記事では、実際にテーブルを作成し、サンプルデータを使いながらGROUP_CONCAT()の使い方を順を追って解説します。サンプルテーブルの作成まず、科目名(SubjectName)と学生名(StudentName)を持つテーブルを作成します。mysql> create table DemoTab