Função de janela COUNT
A função de janela COUNT conta as linhas definidas pela expressão.
A função COUNT tem duas variações. COUNT (*) conta todas as linhas na tabela de destino independente se elas contêm nulls ou não. COUNT (expressão) computa o número de linhas com valores não NULL em uma coluna ou expressão específica.
Sintaxe
COUNT ( * | [ 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 para contagem. ALL é o padrão. DISTINCT não é compatível.
- OVER
-
Especifica as cláusulas de janela das 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 COUNT 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
A função COUNT é compatível com todos os tipos de dados de argumento.
O tipo de retorno compatível com a função COUNT é BIGINT.
Exemplos
O exemplo a seguir mostra o ID de vendas, a quantidade e a contagem de todas as linhas desde o início da janela de dados:
select salesid, qty, count(*) over (order by salesid rows unbounded preceding) as count from winsales order by salesid; salesid | qty | count ---------+-----+----- 10001 | 10 | 1 10005 | 30 | 2 10006 | 10 | 3 20001 | 20 | 4 20002 | 20 | 5 30001 | 10 | 6 30003 | 15 | 7 30004 | 20 | 8 30007 | 30 | 9 40001 | 40 | 10 40005 | 10 | 11 (11 rows)
Para uma descrição da tabela WINSALES, consulte Amostra de tabela para exemplos de funções de janela.
O exemplo a seguir mostra como o ID de vendas, a quantidade e a contagem de linhas não nulas desde o início da janela de dados. (Na tabela WINSALES, a coluna QTY_SHIPPED contém alguns NULLs.)
select salesid, qty, qty_shipped, count(qty_shipped) over (order by salesid rows unbounded preceding) as count from winsales order by salesid; salesid | qty | qty_shipped | count ---------+-----+-------------+------- 10001 | 10 | 10 | 1 10005 | 30 | | 1 10006 | 10 | | 1 20001 | 20 | 20 | 2 20002 | 20 | 20 | 3 30001 | 10 | 10 | 4 30003 | 15 | | 4 30004 | 20 | | 4 30007 | 30 | | 4 40001 | 40 | | 4 40005 | 10 | 10 | 5 (11 rows)