MySQLのMAX・MIN関数の使い方を初心者向けに解説!GROUP BYと集約関数で最大値・最小値を取得するSQL入門
生徒
「MySQLで一番大きい数字とか、一番小さい数字を調べることってできますか?」
先生
「できますよ。そのときに使うのがMAX関数とMIN関数です。データの中から最大値や最小値を見つけるときに使います。」
生徒
「例えば、クラスの中で一番点数が高い人を調べるみたいな感じですか?」
先生
「その通りです。テストの点数表から最高点を探したり、商品の価格の中で一番安いものを調べたりするときに使います。」
生徒
「それならイメージしやすいです。GROUP BYと一緒に使うこともあるんですか?」
先生
「はい。例えば『部署ごとの最高給与』など、グループごとに最大値や最小値を調べるときに使います。今回はその使い方を順番に説明していきます。」
1. MySQLのMAX関数とMIN関数とは?
MySQLには集約関数と呼ばれる便利な機能があります。集約関数とは、複数のデータをまとめて計算するための関数のことです。
例えば、学校のテストの点数一覧があったとします。そこから「一番高い点数」や「一番低い点数」を知りたい場合があります。このようなときに使うのがMAX関数とMIN関数です。
MAXは「Maximum」の略で最大値を意味します。MINは「Minimum」の略で最小値を意味します。
つまり、データの中から一番大きい値を探したいときはMAX関数、一番小さい値を探したいときはMIN関数を使います。MySQLでは売上データ、商品価格、年齢、点数などさまざまな数値データに対して使われます。
2. MAX関数で最大値を取得する基本SQL
まずはMAX関数の基本的な使い方を見てみましょう。ここでは社員の年齢が保存されているテーブルを例に説明します。
テーブルのデータは次のようになっています。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋健 | 28 | ken@example.com
5 | 伊藤美咲 | 22 | misaki@example.com
このテーブルから「一番年齢が高い人の年齢」を調べるSQLは次のようになります。
SELECT MAX(age)
FROM users;
実行結果
MAX(age)
--------
30
このように、MAX関数を使うと指定した列の中で最も大きい値を取得できます。大量のデータがある場合でも、一瞬で最大値を調べることができます。
3. MIN関数で最小値を取得する方法
次はMIN関数です。MIN関数は、指定した列の中から一番小さい値を取得するための関数です。
先ほどと同じテーブルを使います。
SELECT MIN(age)
FROM users;
実行結果
MIN(age)
--------
19
この結果から、最も年齢が若い人は19歳だと分かります。
例えば次のような場面でよく使われます。
- 商品の中で一番安い価格を調べる
- 一番早い日付を調べる
- 最低点数を調べる
このように、MIN関数は「最小値を調べるSQL」としてMySQLで頻繁に使われる基本的な集約関数です。
4. GROUP BYとMAX関数を組み合わせる
実務では、単純に最大値を調べるだけでなく「グループごとに最大値を調べる」ことがよくあります。このときに使うのがGROUP BYです。
GROUP BYとは、データを「グループごと」にまとめる機能です。例えば部署ごと、カテゴリーごと、年ごとなどにデータを分けて集計できます。
次のような売上テーブルがあるとします。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | sales@example.com
2 | 佐藤花子 | 19 | sales@example.com
3 | 鈴木一郎 | 30 | dev@example.com
4 | 高橋健 | 28 | dev@example.com
5 | 伊藤美咲 | 22 | sales@example.com
部署ごとの最高年齢を調べるSQLです。
SELECT email, MAX(age)
FROM users
GROUP BY email;
実行結果
email | MAX(age)
-------------------+---------
sales@example.com | 25
dev@example.com | 30
このようにGROUP BYを使うことで、グループ単位で最大値を調べることができます。
5. GROUP BYとMIN関数の組み合わせ
MIN関数もGROUP BYと組み合わせて使うことができます。例えば、部署ごとの最年少年齢を調べることができます。
SELECT email, MIN(age)
FROM users
GROUP BY email;
実行結果
email | MIN(age)
-------------------+---------
sales@example.com | 19
dev@example.com | 28
このようにすると、部署ごとの最も若い年齢が分かります。企業のデータ分析や統計処理では、このようなグループ集計がよく使われます。
6. MAX・MIN関数の実務での使いどころ
MySQLのMAX関数とMIN関数は、実際のシステム開発やデータ分析で非常によく使われます。
例えばECサイトでは次のような使い方があります。
- 商品の中で最高価格を調べる
- 商品の中で最安値を調べる
- 売上データの最大売上日を調べる
- ユーザーの最年少・最年長を調べる
例えば商品の価格テーブルがあるとします。
id | name | age | email
---+-------------+-----+-------------------
1 | ノートPC | 120000 | shop@example.com
2 | マウス | 3000 | shop@example.com
3 | キーボード | 8000 | shop@example.com
4 | モニター | 45000 | shop@example.com
一番高い商品価格を調べるSQLです。
SELECT MAX(age)
FROM products;
このようにMAX関数とMIN関数は、データベースの中から重要な数値を素早く見つけるための基本的なSQLとしてMySQLで頻繁に利用されます。GROUP BYと組み合わせることで、さらに高度なデータ分析もできるようになります。
まとめ
ここまで、MySQLで最大値と最小値を取得するためのMAX関数とMIN関数の使い方について詳しく学びました。データベースを扱うときには、単にデータを保存するだけではなく、保存されている情報を分析したり整理したりすることがとても重要になります。そのときに役立つのが、今回学んだ集約関数です。
MySQLのMAX関数は、指定した列の中から一番大きい値(最大値)を取得するための関数です。一方、MIN関数は一番小さい値(最小値)を取得するための関数です。これらの関数は、ユーザーの年齢データ、商品の価格データ、売上金額、テストの点数など、さまざまな数値データの中から重要な値を素早く見つけるために使われます。
例えば、会員管理システムでは「最年長ユーザー」や「最年少ユーザー」を調べることがあります。ECサイトでは「最も高い商品価格」や「最も安い商品価格」を確認することがあります。また、売上管理システムでは「最大売上日」や「最低売上日」を調べることもあります。このように、MAX関数とMIN関数はデータベースを使ったシステム開発では非常に基本的でありながら重要なSQL機能のひとつです。
さらに、MAX関数とMIN関数はGROUP BYと組み合わせることで、より高度なデータ集計を行うことができます。GROUP BYは、データをグループごとにまとめる機能です。例えば「部署ごとの最大年齢」「カテゴリーごとの最高価格」「年度ごとの最大売上」など、グループ単位で集計することが可能になります。
データベースを扱う実務では、数万件、数百万件という大量のデータを扱うことも珍しくありません。そのような大きなデータの中から、必要な最大値や最小値を手作業で探すことは不可能です。しかしMySQLのMAX関数やMIN関数を使えば、SQLを一行書くだけで瞬時に結果を取得することができます。このような理由から、これらの関数はSQL入門で必ず学ぶ基本的な集約関数として知られています。
MAX関数とMIN関数の基本SQLを振り返る
まずは基本的なSQLをもう一度確認してみましょう。次のようなユーザーテーブルがあるとします。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋健 | 28 | ken@example.com
5 | 伊藤美咲 | 22 | misaki@example.com
6 | 渡辺直人 | 34 | naoto@example.com
このテーブルから最も年齢が高い人の年齢を調べる場合は、MAX関数を使います。
SELECT MAX(age)
FROM users;
実行結果
MAX(age)
--------
34
次に、最も若い年齢を調べる場合はMIN関数を使います。
SELECT MIN(age)
FROM users;
実行結果
MIN(age)
--------
19
このように、MAX関数とMIN関数はSQLを一行書くだけで最大値や最小値を取得できる非常に便利な機能です。
GROUP BYと組み合わせたデータ集計
次に、GROUP BYを使った集計を確認してみましょう。次のようなユーザーデータがあるとします。ここではメールアドレスのドメインを部署のようなグループとして考えます。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | sales@example.com
2 | 佐藤花子 | 19 | sales@example.com
3 | 鈴木一郎 | 30 | dev@example.com
4 | 高橋健 | 28 | dev@example.com
5 | 伊藤美咲 | 22 | sales@example.com
6 | 渡辺直人 | 34 | dev@example.com
それぞれのグループの中で最大年齢を調べるSQLは次のようになります。
SELECT email, MAX(age)
FROM users
GROUP BY email;
実行結果
email | MAX(age)
-------------------+---------
sales@example.com | 25
dev@example.com | 34
同じように、各グループの最小年齢を調べることもできます。
SELECT email, MIN(age)
FROM users
GROUP BY email;
実行結果
email | MIN(age)
-------------------+---------
sales@example.com | 19
dev@example.com | 28
このようにGROUP BYとMAX関数、MIN関数を組み合わせることで、グループごとの最大値や最小値を簡単に取得できます。これはデータ分析やレポート作成などで非常によく使われるSQLテクニックです。
実務でよく使われるMAX関数とMIN関数の活用例
実際のシステム開発やデータ分析の現場では、MAX関数やMIN関数はさまざまな場面で利用されています。例えばECサイトでは、商品の最高価格や最安価格を確認するために使われます。売上データでは、最大売上日や最低売上日を調べることができます。ユーザー管理システムでは、最年長ユーザーや最年少ユーザーを調べるために使われます。
こうした処理は、データ分析やレポート作成だけでなく、ランキング表示や統計情報の表示などにも利用されます。MySQLのMAX関数やMIN関数は、データベースを使ったアプリケーション開発において非常に基本的でありながら実用的なSQL機能です。
SQL初心者の方は、まず今回学んだMAX関数、MIN関数、GROUP BYの基本的な使い方をしっかり理解することが大切です。これらを理解すると、次のステップとしてAVG関数(平均値)やSUM関数(合計)などの集約関数もスムーズに理解できるようになります。
データベース学習では、実際にSQLを書いて動かしながら理解することが最も効果的です。今回紹介したサンプルSQLを何度か実行してみることで、MAX関数やMIN関数の動きやGROUP BYによるデータ集計の仕組みを自然に理解できるようになるでしょう。
生徒
「今日の内容で、MAX関数とMIN関数がどういうものか分かってきました。データの中で一番大きい値や小さい値を簡単に調べられるんですね。」
先生
「その通りです。MAX関数は最大値、MIN関数は最小値を取得する集約関数です。MySQLではとても基本的でよく使われるSQL機能ですね。」
生徒
「GROUP BYと一緒に使うと、グループごとの最大値や最小値も調べられるんですよね。」
先生
「はい。例えば部署ごとの最高給与、カテゴリーごとの最高価格など、実務ではグループ単位の集計がとても重要になります。」
生徒
「SQLって難しそうだと思っていましたが、こうして一つずつ覚えていくと理解しやすいですね。」
先生
「その調子です。MAX関数やMIN関数はSQL入門で必ず覚えておきたい基本機能です。次はSUM関数やAVG関数など、他の集約関数も学ぶとデータ分析の幅が広がりますよ。」
生徒
「はい。MySQLの集約関数をもっと勉強して、データを分析できるようになりたいです!」