SELECT MAX(列名) FROM テーブル名;
本記事では、MAX関数を使用した最大値を取得する方法を解説していきます。
また「userテーブル」には、次のようなデータが格納されていることを前提としています。
【userテーブル】
ID (id) ※PK
名前 (name)
住所 (address)
年齢 (age)
部署ID (department_id)
指定列の最大値を取得する
「SELECT MAX(列名)」で、指定した列名の最大値を取得することができます。
次の例では、年齢 (age)の最大値を取得しています。
■MAX(列名)の使用例
SELECT MAX(age) FROM user;
■実行結果
+----------+
| MAX(age) |
+----------+
| 44 |
+----------+
1 row in set (0.01 sec)
最大値のレコードを取得する
次の例では、IDが最大値のレコードを取得しています。
■最大値のレコード取得
SELECT
WHERE
id = (SELECT MAX(id) FROM user)
■実行結果
+-------+----------+---------+------+----------^----+
| id | name | address | age | department_id |
+-------+----------+---------+------+---------------+
| 1005 | 斎藤五郎 | 東京都 | 35 | 4 |
+-------+----------+---------+------+---------------+
1 row in set (0.00 sec)
グループ化して最大値を取得する
GROUP BY句を用いてグループ化することで、グループ化ごとの最大値を求めることができます。
次の例では、部署ID (department_id)でグループ化し、部署ごとに一番高い年齢 (age)を求めています。
■GROUP BYを用いたMAX関数の使用例
SELECT
department_id, MAX(age)
GROUP BY
department_id;
■実行結果
+---------------+----------+
| department_id | MAX(age) |
+---------------+----------+
| 1 | 44 |
| 2 | 24 |
| 4 | 35 |
+---------------+----------+
3 rows in set (0.00 sec)
続いての例では、部署ID (department_id)でグループ化し、同じ部署内で年齢 (age)が一番高い人の名前 (name)、住所 (address)、年齢 (age)を求めています。
■GROUP BYを用いたMAX関数の使用例2
SELECT
name, address, MAX(age), department_id
GROUP BY
department_id;
上記のSQLはエラー(MySQLの場合はエラーにならない)になってしまうため、下記のようなSQLで取得することができます。
■GROUP BYを用いたMAX関数の使用例3
SELECT
name, address, age, department_id
user as user1
INNER JOIN (
SELECT department_id as id, MAX(age) as maxAge
FROM sampledb.user GROUP BY department_id
) user2
ON user1.department_id = user2.id AND user1.age = user2.maxAge
■実行結果
+----------+---------+----------+---------------+
| name | address | MAX(age) | department_id |
+----------+---------+----------+---------------+
| 鈴木一郎 | 東京都 | 44 | 1 |
| 田中三郎 | 千葉県 | 24 | 2 |
| 斎藤五郎 | 東京都 | 35 | 4 |
+----------+---------+----------+---------------+
3 rows in set (0.00 sec)
helpful