在本教學中,您將學習如何使用SQL Max
函式查詢組中的最大值。
SQL提供MAX()
函式,用於在一組值中查詢最大值。 以下是MAX
函式的語法。
MAX(expression)
MAX
函式忽略NULL
值。
與SUM,COUNT和AVG函式不同,DISTINCT
選項不適用於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
函式來查詢一分組值中的最大值。