SQLで最大値・最小値を求める!MAX関数とMIN関数の基本と活用法

データベース・SQL

「最高得点は何点?」
「一番安い商品はいくら?」
「最古のデータはいつ?」
こんな疑問に答えてくれるのが、SQLのMAXMIN関数です。

最大値・最小値を簡単に抽出できるこれらの関数は、レポートや分析には欠かせません。

この記事では、SQLでのMAXMIN関数の使い方と注意点を、実例とともにわかりやすく解説します。

スポンサーリンク

MAX関数とMIN関数ってなに?

基本的な役割

  • MAX(列名):指定した列の最大値を返す
  • MIN(列名):指定した列の最小値を返す

基本的な書き方

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

実際の使用例

-- 商品テーブルから最高価格を取得
SELECT MAX(price) FROM products;

-- 注文テーブルから最古の注文日を取得  
SELECT MIN(created_at) FROM orders;

ポイント

  • 数値だけでなく、日付や文字列でも使える
  • 1つの値だけが返される
  • 非常にシンプルな構文で使いやすい

とてもシンプルな構文ですが、応用することで様々な使い方ができます。

次は、条件を付けて最大・最小値を求める方法を見ていきましょう。

WHERE句と組み合わせて条件を付けよう

WHERE句との組み合わせ

MAXMINは、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つの結果が返される
  • グループの名前と最大・最小値が同時に取得できる
  • 全体の傾向や部門間の比較に便利

このようにグループごとに集計することで、全体の傾向や異常値の検出に役立ちます。

次は、最大・最小値に該当する行の詳細情報を取得する方法を紹介します。

最大・最小値の詳細情報を取得しよう

サブクエリを使った方法

MAXMINは値だけを返すため、該当する行の他の情報も知りたい時は、サブクエリを使用します。

実際の使用例

-- 最高価格の商品の詳細情報を取得
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や重複への理解が不可欠です。

まとめ

MAXMIN関数は、SQLの中でもシンプルかつ強力な集計関数です。

覚えるべきポイント

  • 基本構文SELECT MAX(列名) FROM テーブル名
  • WHERE句との組み合わせ:条件を絞って集計
  • GROUP BYとの組み合わせ:グループごとに集計
  • サブクエリの活用:該当行の詳細情報も取得

コメント

タイトルとURLをコピーしました