SQL Max()函數

在本教程中,您將學習如何使用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;

執行上面查詢語句,得到以下結果:

SQL Max()函數

要在結果中包含部門名稱,我們將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;

執行上面查詢語句,得到以下結果:

SQL Max()函數

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;

執行上面查詢語句,得到以下結果:

SQL Max()函數

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函數來查找一分組值中的最大值。