本教學通過範例演示如何使用SQL MIN
函式。 在本教學之後,您將了解如何有效地應用MIN
函式以查詢一組值中的最小值。
SQL MIN
函式返回一組值中的最小值。 以下演示了MIN
函式的語法。
MIN(expression)
與MAX
函式一樣,MIN
函式也忽略NULL
值,DISTINCT
選項不適用於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
函式來查詢一個分組值中的最小值。