在本教程中,您将学习如何使用SQLMax函数查找组中的最大值。
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函数来查找一分组值中的最大值。