在本教程中,您将学习如何使用SQL Max函数查找组中的最大值。
1. SQL MAX函数简介
SQL提供MAX()函数,用于在一组值中查找最大值。 以下是MAX函数的语法。
MAX(expression)
MAX函数忽略NULL值。
与SUM,COUNT和AVG函数不同,DISTINCT选项不适用于MAX函数。
2. SQL MAX函数示例
我们将使用employees表来演示MAX函数的工作原理。
desc employees ;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| employee_id | int(11) | NO | PRI | NULL | auto_increment |
| first_name | varchar(20) | YES | | NULL | |
| last_name | varchar(25) | NO | | NULL | |
| email | varchar(100) | NO | | NULL | |
| phone_number | varchar(20) | YES | | NULL | |
| hire_date | date | NO | | NULL | |
| job_id | int(11) | NO | MUL | NULL | |
| salary | decimal(8,2) | NO | | NULL | |
| manager_id | int(11) | YES | MUL | NULL | |
| department_id | int(11) | YES | MUL | NULL | |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set
以下SELECT语句返回employees表中员工的最高薪水。
SELECT
MAX(salary)
FROM
employees;
+-------------+
| MAX(salary) |
+-------------+
| 24000 |
+-------------+
1 row in set
要获得薪水最高的员工,请使用子查询,如下所示:
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary = (
SELECT
MAX(salary)
FROM
employees
);
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+--------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-----------+--------+
| 100 | Steven | Lee | 24000 |
+-------------+------------+-----------+--------+
1 row in set
子查询返回最高薪水,外部查询获得薪水等于最高薪水的员工。
2.1. SQL MAX与GROUP BY示例
我们通常将MAX函数与GROUP BY子句结合使用来查找每个分组的最大值。
例如,可以使用MAX函数查找每个部门中员工的最高薪水,如下所示:
SELECT
department_id,
MAX(salary)
FROM
employees
GROUP BY
department_id;
执行上面查询语句,得到以下结果:

要在结果中包含部门名称,我们将employees表与departments表连接,如下所示:
SELECT
d.department_id,
department_name,
MAX(salary)
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
e.department_id;
执行上面查询语句,得到以下结果:

2.2. SQL MAX带有ORDER BY示例
与其他聚合函数一样,要根据MAX函数的结果对结果集进行排序,必须将MAX函数放在ORDER BY子句中。
例如,以下语句返回每个部门中员工的最高工资,并根据最高工资对结果集进行排序。
SELECT
d.department_id,
department_name,
MAX(salary)
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
e.department_id
ORDER BY
MAX(salary) DESC;
执行上面查询语句,得到以下结果:

2.3. SQL MAX带有HAVING示例
在MAX函数使用HAVING子句将条件添加到GROUP BY子句汇总分组。
例如,要获得具有最高薪水大于12000的员工的部门,请在MAX函数使用HAVING子句,如下所示:
SELECT
d.department_id,
department_name,
MAX(salary)
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
e.department_id
HAVING
MAX(salary) > 12000;
执行上面示例代码,得到以下结果:
+---------------+-----------------+-------------+
| department_id | department_name | MAX(salary) |
+---------------+-----------------+-------------+
| 2 | 市场营销 | 13000 |
| 8 | 销售 | 14000 |
| 9 | 行政人员 | 24000 |
+---------------+-----------------+-------------+
3 rows in set
在本教程中,我们将演示如何使用MAX函数来查找一分组值中的最大值。
上一篇:
SQL Count()函数
下一篇:
SQL Min()函数
