Categorias:

Funções de agregação (Geral)

MIN_BY / MAX_BY

Encontra a(s) linha(s) contendo o valor mínimo ou 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, MIN_BY(employee_id, salary) retorna o valor da coluna employee_id para a linha que tem o valor mais baixo na coluna salary.

Se várias linhas tiverem o valor mínimo ou 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 baixos ou mais altos de uma coluna especificada.

  • Os valores no ARRAY são ordenados por seus valores correspondentes na coluna que contém os valores mínimos ou máximos.

  • Se várias linhas tiverem estes valores mais baixos ou mais altos, a função será não determinística.

Por exemplo, MIN_BY(employee_id, salary, 5) retorna um ARRAY de valores da coluna employee_id para as 5 linhas contendo os valores mais baixos da coluna salary. Os IDs no ARRAY são ordenados pelos valores correspondentes na coluna salary.

Consulte também

MIN / MAX

Sintaxe

MIN_BY( <col_to_return>, <col_containing_mininum> [ , <maximum_number_of_values_to_return> ] )
Copy
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_mininum , . col_containing_maximum

Coluna contendo o valor mínimo ou 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 no ARRAY são ordenados por seus valores correspondentes col_containing_mininum / col_containing_maximum.

    Por exemplo, MIN_BY(employee_id, salary, 5) retorna os IDs dos funcionários com os 5 salários mais baixos, ordenados por salary (em ordem decrescente).

Notas de uso

  • A função ignora valores NULL em col_containing_mininum e col_containing_maximum.

  • Se todos os valores em col_containing_mininum ou 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 as funções MIN_BY e 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);
Copy

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 |
+-------------+---------------+--------+
Copy

O exemplo seguinte retorna os IDs dos funcionários com os salários mais altos e mais baixos:

SELECT MIN_BY(employee_id, salary), MAX_BY(employee_id, salary) from employees;

+-----------------------------+-----------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY) | MAX_BY(EMPLOYEE_ID, SALARY) |
|-----------------------------+-----------------------------|
|                        1030 |                         900 |
+-----------------------------+-----------------------------+
Copy

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ínimo e máximo.

O exemplo seguinte retorna um ARRAY contendo os IDs dos funcionários com os 3 salários mais altos e mais baixos:

SELECT MIN_BY(employee_id, salary, 3), MAX_BY(employee_id, salary, 3) from employees;

+--------------------------------+--------------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY, 3) | MAX_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------+--------------------------------|
| [                              | [                              |
|   1030,                        |   900,                         |
|   1020,                        |   2010,                        |
|   1001                         |   1001                         |
| ]                              | ]                              |
+--------------------------------+--------------------------------+
Copy

Como mostrado no exemplo, os valores no ARRAY são ordenados por seus valores correspondentes na coluna salary:

  • MIN_BY retorna os IDs de funcionários ordenados por seu salário em ordem crescente.

  • 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.