CodeGym /コース /SQL SELF /最小値と最大値: MIN() と MAX()

最小値と最大値: MIN() と MAX()

SQL SELF
レベル 7, レッスン 4
使用可能

データの極端な値の世界に飛び込もう ― 最小値と最大値の検索だよ。心配しなくてOK、SQLは新しいことを無理やり覚えさせたりしないし、テーブルの中で一番大きい値や一番小さい値を見つける方法をマスターできる。これらの関数はどこでも使われてる:IMDbの映画評価の分析から、火星の最低気温の計算まで。

MIN() と MAX() は集約関数で、データセットから最小値と最大値を返してくれる。まるで優しいエクストリームハンターみたいな感じ:MIN() は一番小さい要素を探して、MAX() は逆に一番大きい要素を探す。使えるのは数字だけじゃなくて、文字列や日付でもOK。

-- MINとMAXの基本形
SELECT 
    MIN(column_name) AS min_value,
    MAX(column_name) AS max_value
FROM table_name;

超カンタン!じゃあ、このマジックがいろんなパターンでどう動くか見てみよう。

構文と基本例

数値データ

例えば、employees というテーブルがあって、そこに社員の給料 (salary) のカラムがあるとする。

最小給料と最大給料を知りたいとき。

テーブル employees

id name salary
1 Anna Song 45000
2 Otto Art 30000
3 Maria Chi 120000
4 Alex Lin 90000
5 Eva Tan 60000
-- 数値データの例
SELECT 
    MIN(salary) AS min_salary,
    MAX(salary) AS max_salary
FROM employees;

結果

min_salary max_salary
30000 120000

テキストデータ

MIN() と MAX() はテキストデータにも使えるよ。

アルファベット順で比較される(そう、文字にも「一番小さい」「一番大きい」があるんだ)。

例えば、students というテーブルがあって、name カラムに学生の名前が入ってるとする。

テーブル students

id name
1 Anna
2 Otto
3 Maria
4 Ben
5 Zoe
-- テキストデータの例
SELECT 
    MIN(name) AS first_name_in_order,
    MAX(name) AS last_name_in_order
FROM students;

結果

first_name_in_order last_name_in_order
Anna Zoe

日付と時間
テーブル events から一番早い日付と一番遅い日付を探すよ。

テーブル events

id event_name event_date
1 New Year Party 2023-01-01
2 Summer Fest 2023-06-15
3 Halloween Bash 2023-10-31
4 Year End Gala 2023-12-31
-- 日付データの例
SELECT 
    MIN(event_date) AS earliest_date,
    MAX(event_date) AS latest_date
FROM events;

結果

earliest_date latest_date
2023-01-01 2023-12-31

MIN() と MAX() を NULL 値があるテーブルで使う場合

もしカラムに NULL があっても、安心してOK:SQLは計算時にそれらを無視してくれる。

つまり、MIN() と MAX() は「普通の」値だけで動く。

テーブル employees_with_null

id name salary
1 Otto 30000
2 Maria NULL
3 Anna 120000
4 John NULL
-- NULLを含むテーブル
SELECT 
    MIN(salary) AS min_salary,
    MAX(salary) AS max_salary
FROM employees_with_null;

salary カラムに NULL があっても、それらは単純に無視される。

min_salary max_salary
30000 120000

でも、もしカラム全体が NULL だけだったら、結果も NULL になるよ。

MIN() と MAX() のリアルな使い方例

一番年上と一番若い社員を調べる

テーブル employees

id name birth_date
1 Otto 1980-05-10
2 Maria 1990-11-20
3 Anna 1975-03-15
4 John 2000-08-01

employees テーブルには birth_date という社員の誕生日を保存するカラムがある。一番年上と一番若い人を調べてみよう。

SELECT
    MIN(birth_date) AS oldest_employee,
    MAX(birth_date) AS youngest_employee
FROM employees;

結果:

oldest_employee youngest_employee
1975-03-15 2000-08-01

売上分析

id amount
1 150.00
2 75.50
3 200.00
4 120.00
5 500.00
6 90.00

sales テーブルには amount という売上金額のカラムがある。最小と最大の売上金額を探そう。

SELECT
    MIN(amount) AS smallest_sale,
    MAX(amount) AS largest_sale
FROM sales;

クエリの結果

smallest_sale largest_sale
75.50 500.00

一番最初と一番最後の注文を探す

もし orders テーブルに order_date カラムがあれば、最初と最後の注文日も簡単にわかる。

元のテーブル orders

order_id customer_id order_date amount
101 1 2023-01-15 10:23:00 250.00
102 2 2023-02-10 14:45:00 150.00
103 3 2023-01-05 09:10:00 300.00
104 1 2023-03-22 16:30:00 500.00
105 4 2023-01-25 11:00:00 120.00
SELECT
    MIN(order_date) AS first_order,
    MAX(order_date) AS last_order
FROM orders;

クエリの結果:

first_order last_order
2023-01-05 09:10:00 2023-03-22 16:30:00

MIN() と MAX() の特徴

テキストの比較: 文字列の場合、MIN() と MAX() はアルファベット順で比較するよ。

NULL の扱い: カラムに他の値があれば NULL は無視される。でも全部 NULL なら結果も NULL になる。

日付の比較: SQLは年だけじゃなくて、月・日・時・分までちゃんと見てくれる。

2
タスク
SQL SELF, レベル 7, レッスン 4
ロック未解除
最小値と最大値の取得
最小値と最大値の取得
2
タスク
SQL SELF, レベル 7, レッスン 4
ロック未解除
最も古い生年月日と最も新しい生年月日を見つける
最も古い生年月日と最も新しい生年月日を見つける
1
アンケート/クイズ
データの集計、レベル 7、レッスン 4
使用不可
データの集計
データの集計
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION