MIN函数是SQL内置的聚合函数,核心作用是从一组数值、日期或字符串数据中筛选出最小的值,既可以直接作用于单表字段,也可以结合分组、关联查询等场景使用,是数据统计类查询中高频使用的函数。

MIN函数基础语法
MIN函数的基础语法格式非常简单,通用写法如下:
-- 基础语法 MIN(expression)
其中expression可以是具体的列名、常量,也可以是包含列的表达式,函数执行后会忽略NULL值,只计算非空数据的最小值。如果是字符串类型的数据,会按照字符的排序规则返回最小的字符串,日期类型则返回最早的日期。
单表场景下的MIN函数使用
获取单列最小值
最常见的场景是从单表中获取某一列的最小值,比如有一张学生成绩表student_score,结构如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 学生ID |
| name | varchar | 学生姓名 |
| score | int | 考试成绩 |
| exam_date | date | 考试日期 |
如果要获取所有学生的最低考试成绩,查询语句如下:
-- 获取最低考试成绩 SELECT MIN(score) AS min_score FROM student_score;
执行后会返回所有成绩中的最小值,结果列别名为min_score。
结合WHERE条件筛选最小值
如果只需要获取特定范围内的数据最小值,可以搭配WHERE条件使用,比如获取2024年1月1日之后的最低考试成绩:
-- 获取指定日期范围内的最低成绩 SELECT MIN(score) AS min_score FROM student_score WHERE exam_date > '2024-01-01';
结合GROUP BY分组获取每组最小值
如果需要按某个维度分组,获取每组的最小值,比如按学生分组获取每个学生的最低考试成绩,可以使用GROUP BY子句:
-- 获取每个学生的最低考试成绩 SELECT name, MIN(score) AS min_score FROM student_score GROUP BY name;
多表关联场景下的MIN函数使用
MIN函数也可以和JOIN关联查询结合使用,比如有两张表,一张是学生表student,一张是成绩表student_score,学生表包含学生ID和班级信息,要获取每个班级的最低考试成绩,查询语句如下:
-- 获取每个班级的最低考试成绩 SELECT s.class, MIN(sc.score) AS min_score FROM student s JOIN student_score sc ON s.id = sc.student_id GROUP BY s.class;
MIN函数使用注意事项
- MIN函数会默认忽略NULL值,如果列中所有值都是NULL,函数会返回NULL,不会报错。
- MIN函数可以和DISTINCT搭配使用,比如
MIN(DISTINCT score)会先对成绩去重,再获取去重后的最小值,不过大多数场景下不需要额外加DISTINCT,因为重复值不影响最小值的计算结果。 - 如果要对MIN函数的结果进行条件筛选,不能直接在WHERE子句中使用,需要搭配HAVING子句,比如获取最低成绩小于60分的班级:
-- 获取最低成绩小于60分的班级 SELECT s.class, MIN(sc.score) AS min_score FROM student s JOIN student_score sc ON s.id = sc.student_id GROUP BY s.class HAVING MIN(sc.score) < 60;
注意:WHERE子句是在分组前筛选数据,HAVING子句是在分组后对聚合函数的结果进行筛选,二者使用场景不同,不要混淆。
和其他聚合函数的搭配使用
MIN函数可以和MAX、AVG、SUM等其他聚合函数同时出现在查询语句中,比如同时获取成绩的最小值、最大值、平均值:
-- 同时获取成绩的最小值、最大值、平均值
SELECT
MIN(score) AS min_score,
MAX(score) AS max_score,
AVG(score) AS avg_score
FROM student_score;