「最高得点は何点?」
「一番安い商品はいくら?」
「最古のデータはいつ?」
こんな疑問に答えてくれるのが、SQLのMAX
とMIN
関数です。
最大値・最小値を簡単に抽出できるこれらの関数は、レポートや分析には欠かせません。
この記事では、SQLでのMAX
とMIN
関数の使い方と注意点を、実例とともにわかりやすく解説します。
MAX関数とMIN関数ってなに?

基本的な役割
- MAX(列名):指定した列の最大値を返す
- MIN(列名):指定した列の最小値を返す
基本的な書き方
SELECT MAX(列名) FROM テーブル名;
SELECT MIN(列名) FROM テーブル名;
実際の使用例
-- 商品テーブルから最高価格を取得
SELECT MAX(price) FROM products;
-- 注文テーブルから最古の注文日を取得
SELECT MIN(created_at) FROM orders;
ポイント
- 数値だけでなく、日付や文字列でも使える
- 1つの値だけが返される
- 非常にシンプルな構文で使いやすい
とてもシンプルな構文ですが、応用することで様々な使い方ができます。
次は、条件を付けて最大・最小値を求める方法を見ていきましょう。
WHERE句と組み合わせて条件を付けよう
WHERE句との組み合わせ
MAX
やMIN
は、WHERE
句と組み合わせることで、特定の条件に合った値を抽出できます。
実際の使用例
-- Bクラスの最高得点を取得
SELECT MAX(score) FROM students WHERE class = 'B';
-- 本カテゴリの最安値を取得
SELECT MIN(price) FROM products WHERE category = 'books';
-- 2024年の最高売上を取得
SELECT MAX(sales) FROM monthly_sales WHERE year = 2024;
ポイント
- WHERE句で対象を絞り込んでから最大・最小を求める
- より具体的で意味のある分析ができる
- 複数の条件を組み合わせることも可能
特定の条件下で最大・最小を求めることで、より意味のある分析が可能になります。次は、グループごとの最大・最小を求める方法を解説します。
GROUP BYでグループごとに集計しよう

GROUP BYとの組み合わせ
GROUP BY
を使えば、部署やカテゴリなどのグループ単位で最大値・最小値を求められます。
実際の使用例
-- 部署ごとの最高給与を取得
SELECT department, MAX(salary) FROM employees GROUP BY department;
-- クラスごとの最低点を取得
SELECT class, MIN(score) FROM students GROUP BY class;
-- 月ごとの最高売上を取得
SELECT month, MAX(sales) FROM daily_sales GROUP BY month;
結果のイメージ
department | MAX(salary)
-----------|------------
営業部 | 850000
開発部 | 920000
人事部 | 780000
ポイント
- 各グループごとに1つの結果が返される
- グループの名前と最大・最小値が同時に取得できる
- 全体の傾向や部門間の比較に便利
このようにグループごとに集計することで、全体の傾向や異常値の検出に役立ちます。
次は、最大・最小値に該当する行の詳細情報を取得する方法を紹介します。
最大・最小値の詳細情報を取得しよう
サブクエリを使った方法
MAX
やMIN
は値だけを返すため、該当する行の他の情報も知りたい時は、サブクエリを使用します。
実際の使用例
-- 最高価格の商品の詳細情報を取得
SELECT * FROM products
WHERE price = (SELECT MAX(price) FROM products);
-- 最古の注文の詳細を取得
SELECT * FROM orders
WHERE created_at = (SELECT MIN(created_at) FROM orders);
-- 最高得点の生徒の情報を取得
SELECT name, class, score FROM students
WHERE score = (SELECT MAX(score) FROM students);
結果のイメージ
name | class | score
--------|-------|------
田中花子 | A組 | 98
ポイント
- サブクエリ(カッコ内のSELECT文)で最大・最小値を求める
- その値と一致する行の全情報を取得できる
- 商品名や顧客名など、値以外の詳細も確認可能
サブクエリを使えば、最大・最小値の「中身」まで確認できます。
最後に、これらの関数を使う時の注意点を押さえておきましょう。
MAX/MIN関数を使う時の注意点

重要な注意事項
NULL値について
- NULL値は自動的に無視される(集計対象外)
- 全ての値がNULLの場合、結果もNULLになる
同じ値が複数ある場合
- 最大・最小値が複数ある時は、すべて取得するために工夫が必要
実際の使用例
-- NULL値がある場合の例
SELECT MAX(price) FROM products WHERE price IS NOT NULL;
-- 同じ最高得点が複数ある場合、全員を取得
SELECT name, score FROM students
WHERE score = (SELECT MAX(score) FROM students);
よくある間違い
-- ❌ 間違い:MAX関数と他の列を直接組み合わせることはできない
SELECT name, MAX(score) FROM students;
-- ✅ 正しい:サブクエリを使う
SELECT name, score FROM students
WHERE score = (SELECT MAX(score) FROM students);
ポイント
- NULL値の扱いを理解しておく
- 複数の最大・最小値がある可能性を考慮する
- MAX/MIN関数は単独で使うか、サブクエリで使う
正確な集計には、NULLや重複への理解が不可欠です。
まとめ
MAX
とMIN
関数は、SQLの中でもシンプルかつ強力な集計関数です。
覚えるべきポイント
- 基本構文:
SELECT MAX(列名) FROM テーブル名
- WHERE句との組み合わせ:条件を絞って集計
- GROUP BYとの組み合わせ:グループごとに集計
- サブクエリの活用:該当行の詳細情報も取得
コメント