データベース設計

【SQL入門】SELECT MAXの使い方(最大値)

SELECT MAXの基本構文

SQLのMAX関数を使うことで、その列の最大値を取得することができます。

MAXの基本構文

SELECT  MAX(列名)  FROM  テーブル名;

本記事では、MAX関数を使用した最大値を取得する方法を解説していきます。

また「userテーブル」には、次のようなデータが格納されていることを前提としています。

ID (id) ※PK名前 (name)住所 (address)年齢 (age)部署ID (department_id)
1001鈴木一郎東京都441
1002佐藤次郎埼玉県321
1003田中三郎千葉県242
1004伊藤四郎東京都222
1005斎藤五郎東京都354
【userテーブル】

指定列の最大値を取得する

「SELECT  MAX(列名)」で、指定した列名の最大値を取得することができます。

次の例では、年齢 (age)の最大値を取得しています。

SELECT MAX(age) FROM user;

■実行結果

+----------+
| MAX(age) |
+----------+
|       44 |
+----------+

最大値のレコードを取得する

次の例では、IDが最大値のレコードを取得しています。

■最大値のレコード取得

SELECT * FROM user
WHERE
id = (SELECT MAX(id) FROM user)

グループ化して最大値を取得する

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 |
+---------------+----------+

以下の例では、部署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でも同様になります。

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

学習書の紹介

SQL 第2版 ゼロからはじめるデータベース操作

大好評のSQL定番入門書が改訂! SQLの書き方からアプリでの利用までしっかり学ぼう!

プログラミング学習シリーズ『SQL ゼロからはじめるデータベース操作』は、「データベースやSQLがはじめて」という初心者を対象に、プロのデータベース(DB)エンジニアである著者がSQLの基礎とコツをやさしく丁寧に教える入門書です。

学習書のお求めはこちらから → IT開発関連書とビジネス書が豊富な翔泳社の通販『SEshop』

-データベース設計