【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()集計関数の組み合わせが基本です。この手法は年齢に限らず、売上金額やテストのスコアなど、さまざまな数値データの最大値取得に応用できます。日常的なデータ集計のシーンでぜひ活用してみてください。
-
MySQLでGROUP BYとMAX()を使って学生ごとのMarks1・Marks2の最高得点を取得する方法
学生ごとのMarks1およびMarks2の最高得点を取得するには、MAX()関数とGROUP BY句を組み合わせて使用します。MAX()は、グループごとに最も大きい値を返す集計関数です。ここでは、学生のメールアドレスごとにレコードをグループ化し、各科目の最高得点を求めます。 1. サンプルテーブルの作成 まず、以下のようにテーブルを作成します。 mysql> create table DemoTable -> ( -> StudentEmailId varchar(20), &nb
-
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)