本教程通过示例演示如何使用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
函数来查找一个分组值中的最小值。