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:

COUNT

Sintaxe

Função de agregação

COUNT_IF( <condition> )
Copy

Função de janela

COUNT_IF( <condition> )
    OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ ASC | DESC ] [ <window_frame> ] ] )
Copy

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);
Copy
SELECT *
    FROM basic_example
    ORDER BY i_col;
Copy
+-------+-------+
| 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;
Copy
+----------------+
| 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;
Copy
+-------------------------+
| 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;
Copy
+---------------------------------------------------+
| COUNT_IF(I_COL IS NOT NULL AND J_COL IS NOT NULL) |
|---------------------------------------------------|
|                                                 3 |
+---------------------------------------------------+