- Categorias:
Funções de agregação (General)
MAX_BY¶
Encontra a(s) linha(s) contendo o valor máximo para uma coluna e retorna o valor de outra coluna naquela linha.
Por exemplo, se uma tabela contiver as colunas employee_id
e salary
, MAX_BY(employee_id, salary)
retorna o valor da coluna employee_id
para a linha que tem o valor mais alto na coluna salary
.
Se várias linhas tiverem o valor máximo especificado, a função será não determinística.
Para retornar valores para várias linhas, especifique o argumento opcional maximum_number_of_values_to_return
. Com este argumento adicional:
A função retorna um ARRAY contendo os valores de uma coluna para as linhas com os valores mais altos de uma coluna especificada.
Os valores na ARRAY são ordenados por seus valores correspondentes na coluna que contém os valores máximos.
Se várias linhas tiverem estes valores mais altos, a função será não determinística.
Por exemplo, MAX_BY(employee_id, salary, 5)
retorna uma ARRAY de valores da coluna employee_id
para as cinco linhas contendo os valores mais altos da coluna salary
. Os IDs no ARRAY são ordenados pelos valores correspondentes na coluna salary
.
- Consulte também:
Sintaxe¶
MAX_BY( <col_to_return>, <col_containing_maximum> [ , <maximum_number_of_values_to_return> ] )
Argumentos¶
Obrigatório:
col_to_return
Coluna contendo o valor a ser retornado.
col_containing_maximum
Coluna contendo o valor máximo.
Opcional:
maximum_number_of_values_to_return
Número inteiro constante especificando o número máximo de valores a retornar. Você deve especificar um número positivo. O número máximo que você pode especificar é
1000
.
Retornos¶
Se
maximum_number_of_values_to_return
não for especificado, a função retornará um valor do mesmo tipo quecol_to_return
.Se
maximum_number_of_values_to_return
for especificado, a função retorna um ARRAY contendo valores do mesmo tipo quecol_to_return
. Os valores na ARRAY são ordenados por seus valores correspondentescol_containing_maximum
.Por exemplo,
MAX_BY(employee_id, salary, 5)
retorna os IDs dos funcionários com os cinco maiores salários, ordenados porsalary
(em ordem decrescente).
Notas de uso¶
A função ignora valores NULL em
col_containing_maximum
.Se todos os valores em
col_containing_maximum
forem NULL, a função retornará NULL (independentemente de o argumento opcionalmaximum_number_of_values_to_return
estar especificado).
Exemplos¶
Os exemplos a seguir demonstram como utilizar a função MAX_BY.
Para executar estes exemplos, execute as seguintes instruções para configurar a tabela e os dados para os exemplos:
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);
Execute a seguinte instrução para ver o conteúdo desta tabela:
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 |
+-------------+---------------+--------+
O exemplo seguinte retorna o ID do funcionário com o salário mais alto:
SELECT MAX_BY(employee_id, salary) FROM employees;
+-----------------------------+
| MAX_BY(EMPLOYEE_ID, SALARY) |
|-----------------------------|
| 900 |
+-----------------------------+
Observe o seguinte:
Como mais de uma linha contém o valor máximo da coluna
salary
, a função é não determinística e pode retornar o ID do funcionário para uma linha diferente em execuções subsequentes.A função ignora o valor NULL na coluna
salary
ao determinar as linhas com os valores máximos.
O exemplo seguinte retorna uma ARRAY contendo os IDs dos funcionários com os três salários mais altos:
SELECT MAX_BY(employee_id, salary, 3) from employees;
+--------------------------------+
| MAX_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------|
| [ |
| 900, |
| 2010, |
| 1001 |
| ] |
+--------------------------------+
Como mostrado no exemplo, os valores na ARRAY são ordenados por seus valores correspondentes na coluna salary
. Assim, MAX_BY retorna os IDs de funcionários ordenados por seu salário em ordem decrescente.
Se mais de uma dessas linhas tiver o mesmo valor na coluna salary
, a ordem dos valores retornados para esse salário é não determinística.