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

MySQLで同じ年齢の学生の人数(頻度)をカウントする方法|COUNT(*)とGROUP BYの基本

MySQLでは、COUNT(*)GROUP BYを組み合わせることで、「同じ年齢の学生が何人いるのか」といった各年齢の出現回数(頻度)を簡単に集計できます。
この記事では、サンプルテーブルの作成からデータの挿入、そして実際に頻度をカウントするクエリの実行まで、手順を追ってわかりやすく解説します。

ステップ1:サンプルテーブルを作成する

まず、学生IDと年齢を格納するためのテーブルを作成します。StudentIdは自動採番される主キー(AUTO_INCREMENT+PRIMARY KEY)として定義しています。

mysql> create table DemoTable
    (
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentAge int
    );
Query OK, 0 rows affected (0.59 sec)

ステップ2:テーブルにレコードを挿入する

次に、INSERT文を使って13件分の学生データ(年齢)を登録します。

mysql> insert into DemoTable(StudentAge) values(16);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(StudentAge) values(17);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(StudentAge) values(18);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentAge) values(17);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentAge) values(17);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable(StudentAge) values(17);
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable(StudentAge) values(18);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(StudentAge) values(18);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(StudentAge) values(19);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(StudentAge) values(19);
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(StudentAge) values(16);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentAge) values(16);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(StudentAge) values(15);
Query OK, 1 row affected (0.16 sec)

ステップ3:登録したデータを確認する

SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable;

このクエリを実行すると、以下のような結果が得られます。

+-----------+------------+
| StudentId | StudentAge |
+-----------+------------+
| 1         | 16         |
| 2         | 17         |
| 3         | 18         |
| 4         | 17         |
| 5         | 17         |
| 6         | 17         |
| 7         | 18         |
| 8         | 18         |
| 9         | 19         |
| 10       | 19         |
| 11       | 16         |
| 12       | 16         |
| 13       | 15         |
+-----------+------------+
13 rows in set (0.00 sec)

ステップ4:年齢ごとの頻度をカウントするクエリ

いよいよ本題の集計です。COUNT(*)で行数を数え、GROUP BY StudentAgeで年齢ごとにグループ化することで、年齢別の出現回数を求められます。カウント結果の列には、AS句を使って「AgeFrequency」という別名を付けています。

mysql> select StudentAge,count(*) AS `AgeFrequency` from DemoTable group by StudentAge;

このクエリを実行すると、次のように年齢ごとの学生数が出力されます。

+------------+--------------+
| StudentAge | AgeFrequency |
+------------+--------------+
| 16         | 3           |
| 17         | 4           |
| 18         | 3           |
| 19         | 2           |
| 15         | 1           |
+------------+--------------+
5 rows in set (0.05 sec)

結果の読み方と押さえておきたいポイント

  • 集計結果:16歳が3人、17歳が4人、18歳が3人、19歳が2人、15歳が1人であることがひと目でわかります。
  • COUNT(*)の役割:グループ内の行数(レコード数)を数える集計関数です。
  • GROUP BYの重要性:GROUP BYを指定しない場合、テーブル全体が1つのグループとして扱われてしまうため、集計対象の列(ここではStudentAge)を必ず指定してください。
  • 応用テクニック:クエリの末尾にORDER BY count(*) DESCを追加すると、出現回数の多い年齢順に結果を並べ替えることができ、より見やすいレポートになります。
  1. JavaでMySQLテーブルのカラム数を取得・カウントする方法

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

  2. 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