- 类别:
:doc:`/sql-reference/functions-aggregation`(通用)
MIN_BY¶
查找包含某列最小值的行,并返回该行中另一列的值。
例如,如果表中包含 employee_id
和 salary
两列,MIN_BY(employee_id, salary)
将返回 salary
列中值最小的那一行的 employee_id
列的值。
如果多行包含指定的最小值,则该函数是不确定的。
若要返回多行的值,请指定可选的 maximum_number_of_values_to_return
实参。有了这个附加实参:
函数将返回一个 ARRAY,其中包含指定列中值最小的行的列值。
ARRAY 中的值按其在包含最小值的列中的相应值排序。
如果多行包含这些最小值,则该函数是不确定的。
例如,MIN_BY(employee_id, salary, 5)
返回 employee_id
列值的 ARRAY,该列对应于包含 salary
列中最小值的 5 行。ARRAY 中的 IDs 按 salary
列中的相应值排序。
- 另请参阅:
语法¶
MIN_BY( <col_to_return>, <col_containing_mininum> [ , <maximum_number_of_values_to_return> ] )
实参¶
必填:
col_to_return
包含要返回的值的列。
col_containing_mininum
包含最小值的列。
可选:
maximum_number_of_values_to_return
常量整数,指定要返回的最大值数字。您必须指定一个正数。可以指定的最大数字为
1000
。
返回¶
如果未指定
maximum_number_of_values_to_return
,则该函数将返回与col_to_return
类型相同的值。如果指定了
maximum_number_of_values_to_return
,函数将返回一个 ARRAY,其中包含与col_to_return
类型相同的值。ARRAY 中的值按其对应的col_containing_mininum
值排序。例如,
MIN_BY(employee_id, salary, 5)
返回工资最低的 5 名员工的 IDs,按 ``salary``(降序)排序。
使用说明¶
该函数忽略
col_containing_mininum
中的 NULL 值。如果
col_containing_mininum
中的所有值都为 NULL,函数将返回 NULL(无论是否指定了可选的maximum_number_of_values_to_return
实参)。
示例¶
以下示例演示了如何使用 MIN_BY 函数。
要运行这些示例,请执行以下语句为示例设置表和数据:
CREATE OR REPLACE TABLE employees(employee_id NUMBER, department_id NUMBER, salary NUMBER);
INSERT INTO employees VALUES
(1001, 10, 10000),
(1020, 10, 9000),
(1030, 10, 8000),
(900, 20, 15000),
(2000, 20, NULL),
(2010, 20, 15000),
(2020, 20, 8000);
执行以下语句查看此表的内容:
SELECT * FROM employees;
+-------------+---------------+--------+
| EMPLOYEE_ID | DEPARTMENT_ID | SALARY |
|-------------+---------------+--------|
| 1001 | 10 | 10000 |
| 1020 | 10 | 9000 |
| 1030 | 10 | 8000 |
| 900 | 20 | 15000 |
| 2000 | 20 | NULL |
| 2010 | 20 | 15000 |
| 2020 | 20 | 8000 |
+-------------+---------------+--------+
以下示例返回工资最低的员工的 ID:
SELECT MIN_BY(employee_id, salary) FROM employees;
+-----------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY) |
|-----------------------------|
| 1030 |
+-----------------------------+
请注意以下事项:
由于不止一行包含列
salary
的最小值,因此该函数是不确定的,并且在后续执行中可能会返回不同行的员工 ID。在确定具有最小值的行时,该函数会忽略
salary
列中的 NULL 值。
以下示例返回一个 ARRAY,其中包含工资最低的 3 名员工的 IDs:
SELECT MIN_BY(employee_id, salary, 3) FROM employees;
+--------------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------|
| [ |
| 1030, |
| 2020, |
| 1020 |
| ] |
+--------------------------------+
如示例所示,ARRAY 中的值按其在 salary
列中的相应值排序。因此,MIN_BY 返回按工资升序排序的员工的 IDs。
如果这些行中有多个行在 salary
列中包含相同的值,则返回的该工资值的顺序是不确定的。