- Categorias:
Funções de agregação (Geral) , Funções de janela (Quadro de janela)
MIN / MAX¶
Retorna o valor mínimo ou máximo para os registros dentro de expr
. NULL são ignorados, a menos que todos os registros sejam NULL, caso em que um valor NULL é retornado.
Sintaxe¶
Função de agregação
MAX( <expr> )
MIN( <expr> )
Função de janela
MAX( <expr> ) [ OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ <window_frame> ] ] ) ]
MIN( <expr> ) [ OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ <window_frame> ] ] ) ]
Para obter mais detalhes sobre a sintaxe window_frame
, consulte Sintaxe e utilização do quadro de janela.
Retornos¶
O tipo de dados do valor retornado é o mesmo que o tipo de dados dos valores de entrada.
Notas de uso¶
Para compatibilidade com outros sistemas, a palavra-chave DISTINCT pode ser especificada como um argumento para MIN ou MAX, mas não tem qualquer efeito.
Se a função for chamada como uma função de janela, a janela pode incluir um
window_frame
opcional. Owindow_frame
(seja cumulativo ou deslizante) especifica o subconjunto de linhas dentro da janela para o qual os valores somados são retornados. Se nenhumwindow_frame
for especificado, o padrão é o seguinte quadro cumulativo de janela (de acordo com o padrão ANSI para funções de janela):RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
Para obter mais detalhes sobre quadros de janela, incluindo sintaxe e exemplos, consulte Sintaxe e utilização do quadro de janela.
Detalhes do agrupamento¶
The comparisons follow the collation based on the input arguments” collations and precedences.
The collation of the result is the same as the collation of the input.
Exemplos¶
O código a seguir demonstra o uso de MIN
e MAX
:
Criar uma tabela e dados:
CREATE OR REPLACE TABLE minmax_example(k CHAR(4), d CHAR(4)); INSERT INTO minmax_example VALUES ('1', '1'), ('1', '5'), ('1', '3'), ('2', '2'), ('2', NULL), ('3', NULL), (NULL, '7'), (NULL, '1');Exibir os dados:
SELECT k, d FROM minmax_example ORDER BY k, d; +------+------+ | K | D | |------+------| | 1 | 1 | | 1 | 3 | | 1 | 5 | | 2 | 2 | | 2 | NULL | | 3 | NULL | | NULL | 1 | | NULL | 7 | +------+------+Use as funções
MIN
eMAX
para recuperar os menores e maiores valores na coluna chamada “d”:SELECT MIN(d), MAX(d) FROM minmax_example; +--------+--------+ | MIN(D) | MAX(D) | |--------+--------| | 1 | 7 | +--------+--------+Combine a cláusula
GROUP BY
com as funçõesMIN
eMAX
para recuperar os menores e maiores valores em cada grupo (onde cada grupo é baseado no valor da colunak
):SELECT k, MIN(d), MAX(d) FROM minmax_example GROUP BY k ORDER BY k; +------+--------+--------+ | K | MIN(D) | MAX(D) | |------+--------+--------| | 1 | 1 | 5 | | 2 | 2 | 2 | | 3 | NULL | NULL | | NULL | 1 | 7 | +------+--------+--------+Use uma cláusula
PARTITION BY
para dividir os dados em grupos com base no valor de k. Note que isto é similar, mas não idêntico, ao uso deGROUP BY
. Em particular, note queGROUP BY
produz uma linha de saída por grupo, enquantoPARTITION BY
produz uma linha de saída por linha de entrada.SELECT k, d, MAX(d) OVER (PARTITION BY k) FROM minmax_example ORDER BY k, d; +------+------+------------------------------+ | K | D | MAX(D) OVER (PARTITION BY K) | |------+------+------------------------------| | 1 | 1 | 5 | | 1 | 3 | 5 | | 1 | 5 | 5 | | 2 | 2 | 2 | | 2 | NULL | 2 | | 3 | NULL | NULL | | NULL | 1 | 7 | | NULL | 7 | 7 | +------+------+------------------------------+Use uma cláusula de janela
ORDER BY
para criar uma janela deslizante com duas linhas de largura, e produza o valor mais alto dentro daquela janela. (Lembre-se de que ORDER BY na cláusula de janela é separado de ORDER BY no nível de instrução). Este exemplo usa uma única partição, portanto não há cláusula PARTITION BY na cláusula OVER().SELECT k, d, MAX(d) OVER (ORDER BY k, d ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) FROM minmax_example ORDER BY k, d; +------+------+----------------------------------------------------------------------+ | K | D | MAX(D) OVER (ORDER BY K, D ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) | |------+------+----------------------------------------------------------------------| | 1 | 1 | 1 | | 1 | 3 | 3 | | 1 | 5 | 5 | | 2 | 2 | 5 | | 2 | NULL | 2 | | 3 | NULL | NULL | | NULL | 1 | 1 | | NULL | 7 | 7 | +------+------+----------------------------------------------------------------------+