- 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_returnnão for especificado, a função retornará um valor do mesmo tipo que- col_to_return.
- Se - maximum_number_of_values_to_returnfor especificado, a função retorna um ARRAY contendo valores do mesmo tipo que- col_to_return. Os valores na ARRAY são ordenados por seus valores correspondentes- col_containing_maximum.- Por exemplo, - MAX_BY(employee_id, salary, 5)retorna os IDs dos funcionários com os cinco maiores salários, ordenados por- salary(em ordem decrescente).
Notas de uso¶
- A função ignora valores NULL em - col_containing_maximum.
- Se todos os valores em - col_containing_maximumforem NULL, a função retornará NULL (independentemente de o argumento opcional- maximum_number_of_values_to_returnestar 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 - salaryao 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.
Consulte também Usando funções de agregação MIN_BY e MAX_BY.