MySQL MAX() 函数使用指南

MySQL MAX() 函数返回表达式代表的所有值中的最大值。

如果您需要获取一个表达式中的最小值,请使用 MIN() 函数。

MAX() 语法

这里是 MySQL MAX() 函数的语法:

MAX(expr)

我们通常在 SQL 中按如下方式使用 MAX() 函数:

SELECT MAX(expr), ...
FROM table_name
[WHERE ...];

或者按如下方式结合 GROUP BY 子句使用 MAX() 函数:

SELECT MAX(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUP BY group_expr1, group_expr2, ...;

参数

expr
expr 一个用于聚合运算的表达式。它可以是一个列名,也可以是一个表达式。
group_expr1, group_expr2, ...
用于分组的表达式或者列名。

返回值

MAX(expr) 函数返回表达式代表的所有值中的最大值。

如果没有匹配的行,MAX() 函数返回 NULL

MAX() 示例

我们将通过 student_score 表进行演示。让我们先创建演示表插入测试数据。

CREATE TABLE `student_score` (
    `id` INT PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(255) NOT NULL,
    `subject` VARCHAR(255) NOT NULL,
    `score` INT NOT NULL
);
INSERT INTO `student_score` (`name`, `subject`, `score`)
VALUES ('Tom', 'Math', 80),
    ('Tom', 'English', 90),
    ('Jim', 'Math', 84),
    ('Jim', 'English', 96),
    ('Tim', 'Math', 80),
    ('Tim', 'English', 98);

以下是表中的数据:

+----+------+---------+-------+
| id | name | subject | score |
+----+------+---------+-------+
|  1 | Tom  | Math    |    80 |
|  2 | Tom  | English |    90 |
|  3 | Jim  | Math    |    84 |
|  4 | Jim  | English |    96 |
|  5 | Tim  | Math    |    80 |
|  6 | Tim  | English |    98 |
+----+------+---------+-------+

MAX() 简单例子

以下 SQL 语句返回所有成绩中的最高成绩。

SELECT MAX(score) from student_score;
+------------+
| MAX(score) |
+------------+
|         98 |
+------------+

MAX() 结合 GROUP BY

让我们使用 MAX() 结合 GROUP BY 来从更多的维度查看最高的成绩。

  1. 查询每个科目的最高成绩

    SELECT subject, MAX(score)
    FROM student_score
    GROUP BY subject;
    
    +---------+------------+
    | subject | MAX(score) |
    +---------+------------+
    | Math    |         84 |
    | English |         98 |
    +---------+------------+

    这里,MySQL 会根据 GROUP BY subject 首先按照 subject 将结果集分组,然后在每个组内再执行 MAX(score)

  2. 查询每个人的最高成绩

    SELECT name, MAX(score)
    FROM student_score
    GROUP BY name;
    
    +------+------------+
    | name | MAX(score) |
    +------+------------+
    | Tom  |         90 |
    | Jim  |         96 |
    | Tim  |         98 |
    +------+------------+

    这里,MySQL 会根据 GROUP BY name 首先按照 name 将结果集分组,然后在每个组内再执行 MAX(score)