- 类别:
聚合函数 (通用)
MAX_BY¶
查找包含某列最大值的行,并返回该行中另一列的值。
例如,如果表中包含 employee_id
和 salary
两列,MAX_BY(employee_id, salary)
将返回 salary
列中值最大的那一行的 employee_id
列的值。
如果多行包含指定的最大值,则该函数是不确定的。
若要返回多行的值,请指定可选的 maximum_number_of_values_to_return
实参。有了这个附加实参:
函数将返回一个 ARRAY,其中包含指定列中值最大的行的列值。
ARRAY 中的值按其在包含最大值的列中的相应值排序。
如果多行包含这些最大值,则该函数是不确定的。
例如,MAX_BY(employee_id, salary, 5)
返回 employee_id
列值的 ARRAY,该列对应于包含 salary
列中最大值的 5 行。ARRAY 中的 IDs 按 salary
列中的相应值排序。
- 另请参阅:
语法¶
MAX_BY( <col_to_return>, <col_containing_maximum> [ , <maximum_number_of_values_to_return> ] )
实参¶
必填:
col_to_return
包含要返回的值的列。
col_containing_maximum
包含最大值的列。
可选:
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_maximum
值排序。例如,
MAX_BY(employee_id, salary, 5)
返回工资最高的 5 名员工的 IDs,按salary
(降序)排序。
使用说明¶
该函数忽略
col_containing_maximum
中的 NULL 值。如果
col_containing_maximum
中的所有值都为 NULL,函数将返回 NULL (无论是否指定了可选的maximum_number_of_values_to_return
实参)。
示例¶
以下示例演示了如何使用 MAX_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 MAX_BY(employee_id, salary) FROM employees;
+-----------------------------+
| MAX_BY(EMPLOYEE_ID, SALARY) |
|-----------------------------|
| 900 |
+-----------------------------+
请注意以下事项:
由于不止一行包含列
salary
的最大值,因此该函数是不确定的,并且在后续执行中可能会返回不同行的员工 ID。在确定具有最大值的行时,该函数会忽略
salary
列中的 NULL 值。
以下示例返回一个 ARRAY,其中包含工资最高的 3 名员工的 IDs:
SELECT MAX_BY(employee_id, salary, 3) from employees;
+--------------------------------+
| MAX_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------|
| [ |
| 900, |
| 2010, |
| 1001 |
| ] |
+--------------------------------+
如示例所示,ARRAY 中的值按其在 salary
列中的相应值排序。因此,MAX_BY 返回按工资降序排序的员工 IDs。
如果这些行中有多个行在 salary
列中包含相同的值,则返回的该工资值的顺序是不确定的。