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:

MAX

Sintaxe

MAX_BY( <col_to_return>, <col_containing_maximum> [ , <maximum_number_of_values_to_return> ] )
Copy

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 que col_to_return.

  • Se maximum_number_of_values_to_return for 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_maximum forem NULL, a função retornará NULL (independentemente de o argumento opcional maximum_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);
Copy

Execute a seguinte instrução para ver o conteúdo desta tabela:

SELECT * FROM employees;
Copy
+-------------+---------------+--------+
| 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;
Copy
+-----------------------------+
| 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;
Copy
+--------------------------------+
| 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.