CodeGym /課程 /SQL SELF /最小值與最大值: MIN()MAX()

最小值與最大值: MIN()MAX()

SQL SELF
等級 7 , 課堂 4
開放

來 dive 一下資料裡的極端值吧——怎麼找最小和最大的數值。別擔心,SQL 不會讓你學什麼超難的新東西,但我們會學會怎麼在表格裡找到最大和最小的資料。這些函數超常用:從分析 IMDb 電影評分到算火星最低溫度都會用到。

MIN()MAX() 是聚合函數,會從一堆資料裡回傳最小值和最大值。它們就像極值獵人一樣:MIN() 找最小的,MAX() 則找最大的。這不只限於數字啦:你也可以找最小和最大的字串或日期。

-- 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

在有 NULL 值的表格裡用 MIN()MAX()

如果欄位裡有 NULL,你可以放心睡覺: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 不只看年份,還會看月份、日期、時、分。

1
問卷/小測驗
資料彙總,等級 7,課堂 4
未開放
資料彙總
資料彙總
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION