在本教程中,您将学习如何使用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()函数