Função de janela MAX
A função MAX de janela retorna o máximo dos valores de entrada da expressão. A função MAX funciona com valores numéricos e ignora valores NULL.
Sintaxe
MAX ( [ ALL ] expression ) OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list frame_clause ] )
Argumentos
- expressão
-
A coluna ou expressão de destino na qual a função opera.
- ALL
-
Com o argumento ALL, a função retém todos os valores duplicados da expressão. ALL é o padrão. DISTINCT não é compatível.
- OVER
-
A cláusula especifica as cláusulas de janela para as funções de agregação. A cláusula OVER distingue funções de agregação de janela das funções de agregação de conjuntos normais.
- PARTITION BY expr_list
-
Define a janela para a função MAX em termos de uma ou mais expressões.
- ORDER BY order_list
-
Classifica as linhas dentro de cada partição. Se nenhuma PARTITION BY for especificada, ORDER BY usa a tabela completa.
- frame_clause
-
Se uma cláusula ORDER BY é usada para uma função agregada, uma cláusula de quadro explícita é necessária. A cláusula de quadro refina o conjunto de linhas na janela de uma função, incluindo ou excluindo conjuntos de linhas no resultado ordenado. A cláusula de quadro consiste na palavra-chave ROWS e nos especificadores associados. Consulte Resumo da sintaxe de funções da janela.
Tipos de dados
Aceita qualquer tipo de dados como entrada. Retorna o mesmo tipo de dados da expressão.
Exemplos
O seguinte exemplo mostra o ID de vendas, a quantidade e a quantidade máxima desde o início da janela de dados:
select salesid, qty,
max(qty) over (order by salesid rows unbounded preceding) as max
from winsales
order by salesid;
salesid | qty | max
---------+-----+-----
10001 | 10 | 10
10005 | 30 | 30
10006 | 10 | 30
20001 | 20 | 30
20002 | 20 | 30
30001 | 10 | 30
30003 | 15 | 30
30004 | 20 | 30
30007 | 30 | 30
40001 | 40 | 40
40005 | 10 | 40
(11 rows)
Para uma descrição da tabela WINSALES, consulte Amostra de tabela para exemplos de funções de janela.
O seguinte exemplo mostra o salesid, a quantidade e a quantidade máxima em um quadro restrito:
select salesid, qty,
max(qty) over (order by salesid rows between 2 preceding and 1 preceding) as max
from winsales
order by salesid;
salesid | qty | max
---------+-----+-----
10001 | 10 |
10005 | 30 | 10
10006 | 10 | 30
20001 | 20 | 30
20002 | 20 | 20
30001 | 10 | 20
30003 | 15 | 20
30004 | 20 | 15
30007 | 30 | 20
40001 | 40 | 30
40005 | 10 | 40
(11 rows)