
指定したカラムの「最大値」を取得するMAX関数の使い方を、初心者向けに1から解説します。
MAX関数は、指定したカラムのレコードの最大値を取得します。「MAX」は、最大を意味する「Maximum」の略です。
SELECT MAX(カラム名)
FROM テーブル名;
たとえば、国語の点数が70、80、60なら、MAX関数が返す値は80です。

MAX関数が返すのは、条件に合う値の中で一番大きな値です。まずはこの点を押さえればOKです。
このページでは、SQLにおけるMAX関数の使い方と構文ルールを、成績表の例を使って説明します。
SQL:MAX関数の使い方・構文ルール
SELECT MAX(カラム名)
FROM テーブル名;
参考 SELECT文とは?
MAX関数は、SUM関数やAVG関数など、ほかの集約関数と同じように記述します。
「MAX(カラム名)」のように、最大値を求めたいカラムを丸括弧で囲むだけです。

ここでは、次のPointListテーブルを例に、MAX関数の処理結果を見ていきます。
| Student | Class | Japanese | Math | English |
|---|---|---|---|---|
| Aさん | 1組 | 70 | 80 | 65 |
| Bさん | 1組 | 80 | 75 | 90 |
| Cさん | 2組 | 60 | 95 | 85 |
| Dさん | 2組 | NULL | 70 | 75 |
成績の一覧から、Japaneseカラムの最大値を取得する場合は、次のように記述します。
SELECT MAX(Japanese) AS max_japanese
FROM PointList;
実行結果は80です。
max_japanese
------------
80
国語・数学・英語の最大値を、1回のSQLで取得することもできます。
SELECT MAX(Japanese) AS max_japanese,
MAX(Math) AS max_math,
MAX(English) AS max_english
FROM PointList;
max_japanese | max_math | max_english
-------------+----------+------------
80 | 95 | 90
MAX関数:NULL値の扱い
指定したカラムにNULL値がある場合、MAX関数はNULL値を除外して最大値を求めます。
先ほどのJapaneseカラムでは、Dさんの値がNULLです。MAX関数は残りの70、80、60を比較するため、結果は80になります。
ただし、対象になる値がすべてNULLの場合は、結果もNULLです。
SELECT MAX(Japanese) AS max_japanese
FROM PointList
WHERE Student = 'Dさん';
max_japanese
------------
NULL
MAX関数で日付の最大値を取得する
MAX関数は数値だけでなく、日付にも利用できます。日付の最大値は、最も新しい日付です。
たとえば、Ordersテーブルから最終注文日を取得する場合は、次のように記述します。
SELECT MAX(order_date) AS latest_order_date
FROM Orders;
反対に、MIN(order_date)なら最も古い日付を取得できます。
MAX関数とGROUP BY句を組み合わせる
MAX関数とGROUP BY句を組み合わせると、指定したグループごとに最大値を取得できます。
先ほどのPointListテーブルから、クラスごとの国語の最高点を求めてみましょう。
SELECT Class,
MAX(Japanese) AS max_japanese
FROM PointList
GROUP BY Class;
Class | max_japanese
------+-------------
1組 | 80
2組 | 60

ご覧のように、GROUP BY Classで行をクラスごとに分け、その中でMAX(Japanese)が計算されます。
MAX関数で最大値を持つ行を取得する
MAX関数だけで取得できるのは、最大値そのものです。最高点を取った生徒名など、最大値を持つ行全体を取得したい場合は、サブクエリなどを使います。
SELECT Student, Class, Japanese, Math, English
FROM PointList
WHERE Math = (
SELECT MAX(Math)
FROM PointList
);
このSQLでは、数学の最高点95を持つCさんの行を取得できます。同点1位が複数人いれば、該当する行はすべて返ります。
MAX関数のまとめ
SQLを基礎から順番に学びたい方は、SQL初心者向け学習ロードマップもあわせてご覧ください。
