在数据库日常查询操作中,经常需要统计某列数据的最大取值和最小取值,比如统计商品表中的最高价格、最低价格,或者统计用户表中的最大年龄、最小年龄。SQL语言内置的MAX和MIN聚合函数就是专门用来完成这类统计需求的,使用起来简单高效,不需要手动遍历所有数据做比对。

MAX和MIN函数基本语法
MAX函数用于返回指定列的最大值,MIN函数用于返回指定列的最小值,两者都属于SQL的聚合函数,基本语法结构一致,格式如下:
-- 获取某列最大值 SELECT MAX(列名) FROM 表名 [WHERE 筛选条件]; -- 获取某列最小值 SELECT MIN(列名) FROM 表名 [WHERE 筛选条件];
其中列名是要统计的目标列,表名是数据所在的表,WHERE子句是可选的,用于添加筛选条件,只统计符合条件的行数据。
基础使用示例
假设我们有一张product商品表,表结构如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 商品ID |
| name | varchar | 商品名称 |
| price | decimal | 商品价格 |
| category | varchar | 商品分类 |
如果要查询所有商品中的最高价格和最低价格,可以执行以下SQL语句:
-- 查询商品最高价和最低价
SELECT
MAX(price) AS max_price,
MIN(price) AS min_price
FROM product;
执行后结果会返回两列,分别是最高价格max_price和最低价格min_price,如果表中没有数据,两个结果都会返回NULL。
带筛选条件的查询
如果需要统计特定分类下的商品最大最小值,可以加上WHERE筛选条件,比如查询分类为电子产品的商品价格极值:
-- 查询电子产品分类的最高价和最低价
SELECT
MAX(price) AS max_price,
MIN(price) AS min_price
FROM product
WHERE category = '电子产品';
分组场景下的使用
如果要同时统计每个分类的商品价格极值,可以结合GROUP BY分组子句使用,示例如下:
-- 按分类分组,查询每个分类的最高价和最低价
SELECT
category,
MAX(price) AS max_price,
MIN(price) AS min_price
FROM product
GROUP BY category;
执行后会返回每个商品分类对应的最高价格和最低价格,方便做不同分类的价格对比。
使用注意事项
- MAX和MIN函数支持的列类型包括数值型、字符串型、日期时间型,数值型统计数值大小,字符串型按字符排序规则取最大最小,日期时间型按时间先后取极值。
- 如果统计的列存在NULL值,MAX和MIN函数会自动忽略NULL值,不会将NULL纳入统计范围。
- 如果表中没有符合筛选条件的行,两个函数都会返回NULL结果。
- 可以给统计结果设置别名,方便后续结果读取,比如上面的AS max_price就是给最大值结果设置别名为max_price。
注意:不要在WHERE子句中直接使用MAX或者MIN函数做条件判断,这类聚合函数的条件筛选需要放在HAVING子句中,比如筛选最高价大于1000的分类,需要写成HAVING MAX(price) > 1000,而不是WHERE MAX(price) > 1000。