MySQL中求最大值和最小值主要用MAX()和MIN()聚合函数,作用于某列返回非NULL极值;可单列使用、配合GROUP BY分组统计,或结合子查询、ORDER BY+LIMIT、窗口函数获取整行记录;注意NULL被忽略、字符按字典序、日期可直接比较。

MySQL 中求最大值和最小值,主要用 MAX() 和 MIN() 聚合函数,它们作用于某一列,返回该列中的最大或最小非 NULL 值。
基本语法与单列使用
这两个函数用法一致,都接受一个表达式(通常是列名)作为参数:
- SELECT MAX(列名) FROM 表名;
- SELECT MIN(列名) FROM 表名;
例如:查询商品表中最高售价和最低售价
SELECT MAX(price) AS max_price, MIN(price) AS min_price FROM products;配合 GROUP BY 分组求极值
当需要按类别分别统计最大/最小值时,加上 GROUP BY 即可:
- 每个分类下的最贵和最便宜商品价格
- 需注意:若要同时查出对应商品名称,不能只靠 MAX/MIN,需结合子查询或窗口函数(见下条)
获取整行记录(不只是数值)
MAX/MIN 只返回值,不返回整行数据。若想查出“价格最高的那条商品完整信息”,有几种方式:
- 用子查询匹配:WHERE price = (SELECT MAX(price) FROM products)
- 用 ORDER BY + LIMIT:ORDER BY price DESC LIMIT 1(注意可能有多个并列最高)
- MySQL 8.0+ 推荐用窗口函数:RANK() 或 ROW_NUMBER() 配合 OVER(ORDER BY price DESC)
注意事项与常见问题
这些细节容易影响结果准确性:
- NULL 值会被自动忽略,不会参与计算
- 字符类型按字典序比较(如 'abc' > 'ab'),不是长度或数值大小
- 日期类型可直接用 MAX/MIN 比较,得到最早/最晚时间
- 聚合函数在没有 GROUP BY 时,整张表视为一组;有 GROUP BY 时按组分别计算










