- Categorias:
Funções de agregação (Geral) , Funções de janela (Geral, Quadro de janela)
COUNT_IF¶
Retorna o número de registros que satisfazem uma condição ou NULL se nenhum registro satisfizer a condição.
- Consulte também:
Sintaxe¶
Função de agregação
COUNT_IF( <condition> )
Função de janela
COUNT_IF( <condition> )
OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ ASC | DESC ] [ <window_frame> ] ] )
Para obter mais detalhes sobre a sintaxe window_frame
, consulte Sintaxe e utilização do quadro de janela.
Argumentos¶
condition
A condição é uma expressão que deve ser avaliada como um valor BOOLEAN (True, False ou NULL)
expr1
A coluna a ser dividida, se você quiser que o resultado seja dividido em várias janelas.
expr2
A coluna para ordenar cada janela. Note que isto é separado de qualquer cláusula ORDER BY para ordenar o conjunto de resultados finais.
Retornos¶
Se a função não retornar NULL, o tipo de dados do valor retornado será NUMBER.
Notas de uso¶
Quando esta função é chamada como uma função de janela:
Se uma subcláusula ORDER BY for usada dentro da cláusula OVER(), então deve ser usado um quadro de janela. Se nenhum quadro de janela for especificado, então o padrão é um quadro de janela cumulativo:
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. Para obter mais informações sobre quadros de janela implícitos, consulte Notas de uso dos quadros de janela.
Exemplos¶
Os exemplos nesta seção demonstram como utilizar a função COUNT_IF
.
As seguintes instruções configuram uma tabela para uso nos exemplos:
CREATE TABLE basic_example (i_col INTEGER, j_col INTEGER); INSERT INTO basic_example VALUES (11,101), (11,102), (11,NULL), (12,101), (NULL,101), (NULL,102);SELECT * FROM basic_example ORDER BY i_col;+-------+-------+ | I_COL | J_COL | |-------+-------| | 11 | 101 | | 11 | 102 | | 11 | NULL | | 12 | 101 | | NULL | 101 | | NULL | 102 | +-------+-------+
O exemplo seguinte passa em TRUE
para a condição, que retorna a contagem de todas as linhas da tabela:
SELECT COUNT_IF(TRUE) FROM basic_example;+----------------+ | COUNT_IF(TRUE) | |----------------| | 6 | +----------------+
O exemplo a seguir retorna o número de linhas onde o valor em J_COL
é maior do que o valor em I_COL
:
SELECT COUNT_IF(j_col > i_col) FROM basic_example;+-------------------------+ | COUNT_IF(J_COL > I_COL) | |-------------------------| | 3 | +-------------------------+
Observe que, no exemplo acima, a contagem não inclui as linhas com valores NULL. Como explicado em Lógica ternária, quando qualquer operando para um operador de comparação é NULL, o resultado será NULL, o que não satisfaz a condição especificada por COUNT_IF
.
O exemplo a seguir retorna o número de linhas que não contêm nenhum valor NULL.
SELECT COUNT_IF(i_col IS NOT NULL AND j_col IS NOT NULL) FROM basic_example;+---------------------------------------------------+ | COUNT_IF(I_COL IS NOT NULL AND J_COL IS NOT NULL) | |---------------------------------------------------| | 3 | +---------------------------------------------------+