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 不只看年份,还会看月份、天、小时、分钟。

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