如何正确使用 MySQL 的 MAX() 和 MIN() 函数获取数值极值

来源:3D模型作者:广州GEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何正确使用 MySQL 的 MAX() 和 MIN() 函数获取数值极值》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何正确使用 MySQL 的 MAX() 和 MIN() 函数获取数值极值》有用,将其分享出去将是对创作者最好的鼓励。

MySQL的MAX()和MIN()是常用的聚合函数,分别用于返回指定列的最大值和最小值,在数据统计、极值查询等场景中应用十分广泛。这两个函数的使用逻辑并不复杂,但在实际开发中如果不注意细节,很容易出现查询结果不符合预期的情况。

如何正确使用 MySQL 的 MAX() 和 MIN() 函数获取数值极值

MAX()和MIN()函数的基础语法

两个函数的基础语法结构一致,基本格式如下:

-- MAX函数语法,返回column_name列的最大值
MAX(column_name)
-- MIN函数语法,返回column_name列的最小值
MIN(column_name)

函数可以作用于数值型、字符串型、日期时间型的字段:数值型字段会按数值大小比较,字符串型字段按字符集的排序规则比较,日期时间型字段按时间先后比较,时间更晚的日期对应MAX值,更早的对应MIN值。

NULL值的处理规则

MAX()和MIN()函数在计算时会自动忽略列中的NULL值,不会将NULL纳入极值计算范围。如果指定列的所有值都是NULL,那么函数会返回NULL结果。

我们可以通过以下示例验证这个规则,先创建测试表并插入数据:

-- 创建测试表
CREATE TABLE test_score (
    id INT PRIMARY KEY AUTO_INCREMENT,
    score INT,
    student_name VARCHAR(20)
);
-- 插入测试数据,包含NULL值
INSERT INTO test_score (score, student_name) VALUES
(85, '张三'),
(92, '李四'),
(NULL, '王五'),
(78, '赵六');

查询score列的极值:

-- 查询最高分,结果为92
SELECT MAX(score) AS max_score FROM test_score;
-- 查询最低分,结果为78
SELECT MIN(score) AS min_score FROM test_score;

可以看到NULL值的记录没有被纳入计算,最高分是92,最低分是78。

常见使用场景

单字段极值查询

这是最基础的使用场景,直接查询单个字段的极值,比如查询商品表的最高价格和最低价格:

-- 假设商品表为product,price为价格字段
SELECT MAX(price) AS max_price, MIN(price) AS min_price FROM product;

分组场景下的极值查询

如果需要按某个维度分组后获取每组的极值,需要搭配GROUP BY子句使用。比如查询每个班级的最高分和最低分:

-- 假设score表包含class_id(班级ID)和score(分数)字段
SELECT 
    class_id,
    MAX(score) AS class_max_score,
    MIN(score) AS class_min_score
FROM score
GROUP BY class_id;

搭配条件过滤使用

可以在WHERE子句中添加过滤条件,先筛选符合条件的记录再计算极值。比如查询成绩大于80分的学生的最高分和最低分:

SELECT MAX(score) AS max_score, MIN(score) AS min_score 
FROM test_score 
WHERE score > 80;

常见使用误区与规避方法

误区1:同时查询极值和对应记录的其他字段

很多用户会尝试直接同时查询极值和对应的学生姓名等字段,比如以下错误写法:

-- 错误写法,MySQL中这样的查询逻辑不严谨,返回的学生姓名可能和极值不匹配
SELECT MAX(score) AS max_score, student_name FROM test_score;

规避方法:如果需要获取极值对应的完整记录,应该使用子查询,先获取极值再匹配对应的记录:

-- 查询最高分对应的学生信息
SELECT * FROM test_score 
WHERE score = (SELECT MAX(score) FROM test_score);

误区2:对COUNT()和MAX()/MIN()的使用场景混淆

COUNT()用于统计行数,MAX()/MIN()用于获取极值,不要误用函数。比如需要统计非空值的行数用COUNT(score),需要获取最大分数用MAX(score),两者功能完全不同。

误区3:忽略字段类型对比较结果的影响

如果字段是字符串类型的数值,比如score字段是VARCHAR类型,存储的值是'78'、'92'、'100',那么MAX()函数会按字符串规则比较,'92'会大于'100',因为字符串比较是逐字符比较,'9'的ASCII码大于'1'。这种情况下需要先转换字段类型为数值型再计算:

-- 将字符串类型字段转为数值型后计算极值
SELECT MAX(CAST(score AS SIGNED)) AS max_score FROM test_score;

总结

MAX()和MIN()函数是MySQL中获取数值极值的便捷工具,使用时需要注意它们会自动忽略NULL值,分组查询要搭配GROUP BY子句,不要直接在查询极值的同时返回非聚合字段的内容。只要掌握这些使用规则和常见误区的规避方法,就能准确高效地完成各类极值查询需求。

MySQLMAX函数MIN函数数值极值聚合函数修改时间:2026-07-02 03:24:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。