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