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

【MySQL】GROUP BYとMAX()を使って同名の学生レコードから最大年齢を取得する方法

はじめに

MySQLで、同じ名前の学生が複数登録されているテーブルから、名前ごとの最大年齢を取得したいケースはよくあります。このような場合には、GROUP BY句と集計関数のMAX()を組み合わせることで、シンプルかつ効率的に実現できます。

本記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、学生名ごとに最大年齢を取得する手順を詳しく解説します。

テーブルの作成

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable1964
(
StudentName varchar(20),
StudentAge int
);
Query OK, 0 rows affected (0.00 sec)

このテーブルは、学生名を格納する「StudentName」(varchar型)と、年齢を格納する「StudentAge」(int型)の2つのカラムで構成されています。

サンプルデータの挿入

次に、INSERTコマンドを使ってテーブルにレコードを挿入します。同じ学生名のデータを複数登録している点に注目してください。

mysql> insert into DemoTable1964 values('Chris',23);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1964 values('David',34);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1964 values('Chris',27);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1964 values('Sam',31);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1964 values('David',32);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1964 values('David',37);
Query OK, 1 row affected (0.00 sec)

登録データの確認

SELECT文を使って、テーブル内のすべてのレコードを表示します。

mysql> select * from DemoTable1964;

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

+-------------+------------+
| StudentName | StudentAge |
+-------------+------------+
| Chris | 23 |
| David | 34 |
| Chris | 27 |
| Sam | 31 |
| David | 32 |
| David | 37 |
+-------------+------------+
6 rows in set (0.00 sec)

Chrisが2件、Davidが3件、Samが1件登録されており、合計6件のレコードが存在することが確認できます。

学生名ごとの最大年齢を取得するクエリ

ここからが本題です。GROUP BY句でStudentNameごとにグループ化し、MAX()関数で各グループ内の最大年齢を取得します。

mysql> select StudentName,max(StudentAge) from DemoTable1964 group by StudentName;

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

+-------------+-----------------+
| StudentName | max(StudentAge) |
+-------------+-----------------+
| Chris | 27 |
| David | 37 |
| Sam | 31 |
+-------------+-----------------+
3 rows in set (0.00 sec)

クエリの仕組み

このクエリがどのように動作しているのか、ポイントを整理します。

  • GROUP BY StudentName:同じ学生名を持つレコードを1つのグループにまとめます。これにより、Chris、David、Samの3つのグループが生成されます。
  • MAX(StudentAge):各グループ内で最も大きい年齢の値を1つだけ返します。

その結果、Chrisの最大年齢は27歳、Davidは37歳、Samは31歳であることが一目でわかります。重複する名前のレコードがあっても、グループ化によって名前ごとに集計されるため、正確な最大値を取得できるのです。

まとめ

MySQLで同名のレコードから最大値を取得するには、GROUP BY句とMAX()集計関数の組み合わせが基本です。この手法は年齢に限らず、売上金額やテストのスコアなど、さまざまな数値データの最大値取得に応用できます。日常的なデータ集計のシーンでぜひ活用してみてください。

  1. MySQLでGROUP BYとMAX()を使って学生ごとのMarks1・Marks2の最高得点を取得する方法

    学生ごとのMarks1およびMarks2の最高得点を取得するには、MAX()関数とGROUP BY句を組み合わせて使用します。MAX()は、グループごとに最も大きい値を返す集計関数です。ここでは、学生のメールアドレスごとにレコードをグループ化し、各科目の最高得点を求めます。 1. サンプルテーブルの作成 まず、以下のようにテーブルを作成します。 mysql> create table DemoTable     -> (     -> StudentEmailId varchar(20), &nb

  2. MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法

    MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)