Categorias:

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

MIN_BY

Encontra a(s) linha(s) contendo o valor mínimo 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 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 de uma coluna especificada.

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

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

Por exemplo, MIN_BY(employee_id, salary, 5) retorna uma ARRAY de valores da coluna employee_id para as cinco 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

Sintaxe

MIN_BY( <col_to_return>, <col_containing_mininum> [ , <maximum_number_of_values_to_return> ] )
Copy

Argumentos

Obrigatório:

col_to_return

Coluna contendo o valor a ser retornado.

col_containing_mininum

Coluna contendo o valor mínimo.

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

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

Notas de uso

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

  • Se todos os valores em col_containing_mininum 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 MIN_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 baixo:

SELECT MIN_BY(employee_id, salary) FROM employees;
Copy
+-----------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY) |
|-----------------------------|
|                        1030 |
+-----------------------------+

Observe o seguinte:

  • Como mais de uma linha contém o valor mínimo 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ínimos.

O exemplo seguinte retorna uma ARRAY contendo os IDs dos funcionários com os três salários mais baixos:

SELECT MIN_BY(employee_id, salary, 3) FROM employees;

+--------------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------|
| [                              |
|   1030,                        |
|   2020,                        |
|   1020                         |
| ]                              |
+--------------------------------+
Copy

Como mostrado no exemplo, os valores na ARRAY são ordenados por seus valores correspondentes na coluna salary. Assim, MIN_BY retorna os IDs de funcionários ordenados por seu salário em ordem crescente.

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.