SELECT MAXの基本構文
SQLのMAX関数を使うことで、その列の最大値を取得することができます。
MAXの基本構文
SELECT MAX(列名) FROM テーブル名;
本記事では、MAX関数を使用した最大値を取得する方法を解説していきます。
また「userテーブル」には、次のようなデータが格納されていることを前提としています。
【userテーブル】
ID (id) ※PK | 名前 (name) | 住所 (address) | 年齢 (age) | 部署ID (department_id) |
1001 | 鈴木一郎 | 東京都 | 44 | 1 |
1002 | 佐藤次郎 | 埼玉県 | 32 | 1 |
1003 | 田中三郎 | 千葉県 | 24 | 2 |
1004 | 伊藤四郎 | 東京都 | 22 | 2 |
1005 | 斎藤五郎 | 東京都 | 35 | 4 |
指定列の最大値を取得する
「SELECT MAX(列名)」で、指定した列名の最大値を取得することができます。
次の例では、年齢 (age)の最大値を取得しています。
■MAX(列名)の使用例
SELECT MAX(age) FROM user;
■実行結果
+----------+ | MAX(age) | +----------+ | 44 | +----------+ 1 row in set (0.01 sec)
最大値のレコードを取得する
次の例では、IDが最大値のレコードを取得しています。
■最大値のレコード取得
SELECT * FROM user 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) FROM user 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 FROM user GROUP BY department_id;
上記のSQLはエラー(MySQLの場合はエラーにならない)になってしまうため、下記のようなSQLで取得することができます。
■GROUP BYを用いたMAX関数の使用例3
SELECT name, address, age, department_id FROM 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
この記事は役に立ちましたか?