SQL Min()函式


本教學通過範例演示如何使用SQL MIN函式。 在本教學之後,您將了解如何有效地應用MIN函式以查詢一組值中的最小值。

1. SQL MIN函式簡介

SQL MIN函式返回一組值中的最小值。 以下演示了MIN函式的語法。

MIN(expression)

MAX函式一樣,MIN函式也忽略NULL值,DISTINCT選項不適用於MIN函式。

2. SQL MIN函式範例

我們將使用employees表來演示MIN函式的功能。

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

要查詢員工的最低薪水,請將MIN函式應用於employees表的salary列。

SELECT 
    MIN(salary)
FROM
    employees;
+-------------+
| MIN(salary) |
+-------------+
| 2500        |
+-------------+
1 row in set

要獲取薪水最低的員工的資訊,請使用以下子查詢:

SELECT
    employee_id,
    first_name,
    last_name,
    salary
FROM
    employees
WHERE
    salary = (
        SELECT
            MIN(salary)
        FROM
            employees
    );

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

+-------------+------------+-----------+--------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-----------+--------+
|         119 | Karen      | Zhang     | 2500   |
+-------------+------------+-----------+--------+
1 row in set

首先,子查詢返回最低工資。 然後,外部查詢檢索其薪水等於子查詢返回的最低薪水的員工。

2.1. SQL MIN帶有GROUP BY範例

我們經常將MIN函式與GROUP BY子句一起使用來查詢每個分組中的最小值。

例如,以下查詢返回每個部門(分組)中薪水最低的員工。

SELECT
    department_id,
    MIN(salary)
FROM
    employees
GROUP BY
    department_id;

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

+---------------+-------------+
| department_id | MIN(salary) |
+---------------+-------------+
|             1 | 4400        |
|             2 | 6000        |
|             3 | 2500        |
|             4 | 6500        |
|             5 | 2700        |
|             6 | 4200        |
|             7 | 10000       |
|             8 | 6200        |
|             9 | 17000       |
|            10 | 6900        |
|            11 | 8300        |
+---------------+-------------+
11 rows in set

GROUP BY子句按部門對員工進行分組。 對於每個分組,查詢返回薪水最低的行。但是結果集無法看到部門的名稱。

要在結果集中組合部門的名稱,需要使用內部聯接子句將employees表與departments連線,如下所示:

SELECT
    d.department_id,
    department_name,
    MIN(salary)
FROM
    employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
    d.department_id;

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

2.2. SQL MIN與ORDER BY範例

要通過MIN函式的結果對分組進行排序,需要在MIN函式之後使用ORDER BY子句。

以下查詢首先檢索每個部門中薪水最低的員工,然後按薪酬按升序對這些部門進行排序。

SELECT
    d.department_id,
    department_name,
    MIN(salary)
FROM
    employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
    d.department_id
ORDER BY
    MIN(salary);

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

2.3. SQL MIN與HAVING範例

可以使用HAVING子句指定組的過濾條件。 要根據MIN函式的結果過濾分組,在MIN函式之後使用HAVING子句。

例如,以下查詢檢索每個部門中薪水最低的員工,並且只包括薪水低於3000的部門。

SELECT
    d.department_id,
    department_name,
    MIN(salary)
FROM
    employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
    d.department_id
HAVING
    MIN(salary) < 3000;

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

+---------------+-----------------+-------------+
| department_id | department_name | MIN(salary) |
+---------------+-----------------+-------------+
|             3 | 採購            | 2500        |
|             5 | 運輸            | 2700        |
+---------------+-----------------+-------------+
2 rows in set

所以現在您應該知道如何使用SQL MIN函式來查詢一個分組值中的最小值。