- Categorias:
Funções de agregação (General) , Funções 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 uma sintaxe window_frame
detalhada, consulte Sintaxe e uso da função 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. Observe que isso é separado da cláusula ORDER BY que classifica o conjunto de resultados final.
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 com uma cláusula ORDER BY, é necessário especificar um quadro de janela. Se você não especificar uma quadro de janela, o seguinte quadro padrão será usado:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
Para obter mais informações sobre quadros de janela, incluindo sintaxe, notas de uso e exemplos, consulte Sintaxe e uso da função 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 | +---------------------------------------------------+