- 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
Sintaxe¶
MIN_BY( <col_to_return>, <col_containing_mininum> [ , <maximum_number_of_values_to_return> ] )
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_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 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 no ARRAY são ordenados por seus valores correspondentescol_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 porsalary
(em ordem decrescente).
Notas de uso¶
A função ignora valores NULL em
col_containing_mininum
ecol_containing_maximum
.Se todos os valores em
col_containing_mininum
oucol_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 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);
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 |
+-------------+---------------+--------+
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 |
+-----------------------------+-----------------------------+
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 |
| ] | ] |
+--------------------------------+--------------------------------+
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.