在SQL数据处理中,经常需要统计某个字段的最大值或最小值,比如查找最高的商品价格、最早的用户注册时间等,这时候SQL内置的MAX和MIN函数就能派上大用场。这两个属于聚合函数,可以直接对指定列的数据进行极值计算,使用起来非常方便。

MAX和MIN函数的基础语法
MAX函数用于返回指定列的最大值,MIN函数用于返回指定列的最小值,二者语法结构一致,基础用法如下:
-- 查询单列最大值 SELECT MAX(列名) FROM 表名; -- 查询单列最小值 SELECT MIN(列名) FROM 表名;
需要注意,这两个函数会忽略列中的NULL值,不会对空值进行计算,所以如果目标列全是NULL,返回结果也会是NULL。
单字段极值查询示例
假设我们有一张product商品表,表结构如下:
| id | name | price | stock |
|---|---|---|---|
| 1 | 笔记本 | 4999 | 100 |
| 2 | 鼠标 | 89 | 500 |
| 3 | 键盘 | 299 | 300 |
要查询商品的最高价格和最低价格,执行以下SQL即可:
-- 查询最高价格 SELECT MAX(price) AS max_price FROM product; -- 查询最低价格 SELECT MIN(price) AS min_price FROM product;
执行后max_price会返回4999,min_price会返回89,AS关键字用来给结果列起别名,方便查看。
分组场景下的极值查询
如果需要按类别统计每个类别的最高价格,比如后续给商品表增加了category分类字段,想要按分类求极值,可以结合GROUP BY子句使用:
-- 按分类统计每个分类的最高价格和最低价格
SELECT
category,
MAX(price) AS category_max_price,
MIN(price) AS category_min_price
FROM product
GROUP BY category;这样就能得到每个商品分类对应的最高和最低价格,适合做分类数据统计。
结合条件筛选的极值查询
如果只需要查询满足特定条件的极值,比如库存大于200的商品中的最高价格,可以搭配WHERE子句:
-- 查询库存大于200的商品的最高价格 SELECT MAX(price) AS max_price FROM product WHERE stock > 200;
这里条件筛选后再计算极值,只会统计符合库存要求的商品数据,结果会更精准。
使用注意事项
- MAX和MIN函数不仅支持数值类型,还支持日期、字符串类型,比如日期列用MAX会返回最晚的日期,字符串会按字典序返回最大最小的字符串。
- 如果查询时同时用MAX/MIN和其他非聚合列,必须搭配GROUP BY子句,否则会报错。
- 这两个函数可以和DISTINCT搭配使用,比如
MAX(DISTINCT price),会先去重再计算最大值,适合有重复数据的场景。