目录

SQL中max函数的使用

转载自:http://www.jikedaquan.com/3331.html

在本教程中,您将学习如何使用SQL Max函数查找组中的最大值。

1. SQL MAX函数简介

SQL提供MAX()函数,用于在一组值中查找最大值。 以下是MAX函数的语法。

SQL

1
MAX(expression)

MAX函数忽略NULL值。

SUMCOUNTAVG函数不同,DISTINCT选项不适用于MAX函数。

2. SQL MAX函数示例

我们将使用employees表来演示MAX函数的工作原理。

SQL

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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表中员工的最高薪水。

SQL

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT 
    MAX(salary)
FROM
    employees;
+-------------+
| MAX(salary) |
+-------------+
| 24000       |
+-------------+
1 row in set

要获得薪水最高的员工,请使用子查询,如下所示:

SQL

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
SELECT
    employee_id,
    first_name,
    last_name,
    salary
FROM
    employees
WHERE
    salary = (
        SELECT
            MAX(salary)
        FROM
            employees
    );

执行上面查询语句,得到以下结果 -

SQL

1
2
3
4
5
6
+-------------+------------+-----------+--------+
| 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函数查找每个部门中员工的最高薪水,如下所示:

SQL

1
2
3
4
5
6
7
SELECT
    department_id,
    MAX(salary)
FROM
    employees
GROUP BY
    department_id;

执行上面查询语句,得到以下结果:

要在结果中包含部门名称,我们将employees表与departments表连接,如下所示:

SQL

1
2
3
4
5
6
7
8
9
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子句中。

例如,以下语句返回每个部门中员工的最高工资,并根据最高工资对结果集进行排序。

SQL

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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子句,如下所示:

SQL

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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;

执行上面示例代码,得到以下结果:

1
2
3
4
5
6
7
8
+---------------+-----------------+-------------+
| department_id | department_name | MAX(salary) |
+---------------+-----------------+-------------+
|             2 | 市场营销        | 13000       |
|             8 | 销售            | 14000       |
|             9 | 行政人员        | 24000       |
+---------------+-----------------+-------------+
3 rows in set

在本教程中,我们将演示如何使用MAX函数来查找一分组值中的最大值。