- Categorias:
- Funções de agregação (General) , Funções de janela 
COUNT¶
Retorna o número de registros diferentes de NULL para as colunas especificadas ou o número total de registros.
Sintaxe¶
Função de agregação
COUNT( [ DISTINCT ] <expr1> [ , <expr2> ... ] )
COUNT(*)
COUNT(<alias>.*)
Função de janela
COUNT( [ DISTINCT ] <expr1> [ , <expr2> ... ] ) OVER (
                                                     [ PARTITION BY <expr3> ]
                                                     [ ORDER BY <expr4> [ ASC | DESC ] [ <window_frame> ] ]
                                                     )
Para uma sintaxe window_frame detalhada, consulte Sintaxe e uso da função de janela.
Argumentos¶
- expr1
- Um nome de coluna, que pode ser um nome qualificado (por exemplo, banco_de_dados.esquema.tabela.nome_da_coluna). 
- expr2
- Você pode incluir nome(s) de coluna adicional(is), se desejar. Por exemplo, você poderia contar o número de combinações distintas de sobrenome e nome. 
- expr3
- A coluna a ser dividida, se você quiser que o resultado seja dividido em várias janelas. 
- expr4
- A coluna para ordenar cada janela. Note que isto é separado de qualquer cláusula ORDER BY para ordenar o conjunto de resultados finais. 
- *
- Retorna o número total de registros. - Ao passar um curinga para a função, você pode qualificar o curinga com o nome ou alias da tabela. Por exemplo, para passar todas as colunas da tabela nomeadas - mytable, especifique o seguinte:- (mytable.*) - Também é possível usar as palavras-chave ILIKE e EXCLUDE para filtrar: - ILIKE filtra nomes de colunas que correspondem ao padrão especificado. Apenas um padrão é permitido. Por exemplo: - (* ILIKE 'col1%') 
- EXCLUDE filtra nomes de coluna que não correspondem à coluna ou colunas especificadas. Por exemplo: - (* EXCLUDE col1) (* EXCLUDE (col1, col2)) 
 - Os qualificadores são válidos quando você usa essas palavras-chave. O exemplo a seguir usa a palavra-chave ILIKE para filtrar todas as colunas que correspondem ao padrão - col1%na tabela- mytable:- (mytable.* ILIKE 'col1%') - As palavras-chave ILIKE e EXCLUDE não podem ser combinadas em uma única chamada de função. - Se você especificar um curinga não qualificado e não filtrado ( - *), a função retornará o número total de registros, incluindo registros com valores NULL.- Se você especificar um curinga com a palavra-chave ILIKE ou EXCLUDE para filtragem, a função excluirá registros com valores NULL. - Para esta função, as palavras-chave ILIKE e EXCLUDE são válidas somente em uma lista SELECT ou cláusula GROUP BY. - Para obter mais informações sobre as palavras-chave ILIKE e EXCLUDE, consulte a seção «Parâmetros» em SELECT. 
- alias.*
- Retorna o número de registros que não contêm nenhum valor NULL. Para um exemplo, consulte Exemplos. 
Retornos¶
Retorna um valor do tipo NUMBER.
Notas de uso¶
- Esta função trata JSON nulo (VARIANT NULL) como SQL NULL. 
- Para obter mais informações sobre valores e funções agregadas NULL, consulte Funções de agregação e valores NULL. 
- Quando esta função é chamada como uma função agregada: - Se a palavra-chave - DISTINCTfor usada, ela se aplica a todas as colunas. Por exemplo,- DISTINCT col1, col2, col3significa retornar o número de combinações diferentes de colunas- col1,- col2e- col3. Por exemplo, suponha que os dados sejam:- 1, 1, 1 1, 1, 1 1, 1, 1 1, 1, 2 - Nesse caso, a função retorna - 2, porque esse é o número de combinações distintas de valores nas três colunas.
 
- Quando esta função é chamada como uma função de janela com uma cláusula OVER com uma cláusula ORDER BY: - O quadro de janela é exigido. Se nenhum quadro de janela for especificado explicitamente, o seguinte quadro de janela implícito 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. 
- O uso da palavra-chave DISTINCT dentro da função de janela é proibido e resulta em um erro de tempo de compilação. 
 
- Para retornar o número de linhas que correspondem a uma condição, use COUNT_IF. 
- Quando possível, utilizar a função COUNT em tabelas e exibição sem uma política de acesso a linhas. A consulta com esta função é mais rápida e precisa em tabelas ou exibição sem uma política de acesso a linhas. As razões para a diferença de desempenho incluem: - O Snowflake mantém estatísticas em tabelas e exibições, e esta otimização permite que consultas simples sejam executadas mais rapidamente. 
- Quando uma política de acesso a linhas é definida em uma tabela ou exibição e a função COUNT é usada em uma consulta, o Snowflake deve digitalizar cada linha e determinar se o usuário tem permissão para visualizar a linha. 
 
Exemplos¶
Os exemplos a seguir usam a função COUNT em dados com valores NULL.
Criar uma tabela e inserir valores:
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);
Consultar a tabela:
SELECT *
    FROM basic_example
    ORDER BY i_col;
+-------+-------+
| I_COL | J_COL |
|-------+-------|
|    11 |   101 |
|    11 |   102 |
|    11 |  NULL |
|    12 |   101 |
|  NULL |   101 |
|  NULL |   102 |
+-------+-------+
SELECT COUNT(*) AS "All",
       COUNT(* ILIKE 'i_c%') AS "ILIKE",
       COUNT(* EXCLUDE i_col) AS "EXCLUDE",
       COUNT(i_col) AS "i_col", 
       COUNT(DISTINCT i_col) AS "DISTINCT i_col", 
       COUNT(j_col) AS "j_col", 
       COUNT(DISTINCT j_col) AS "DISTINCT j_col"
  FROM basic_example;
+-----+-------+---------+-------+----------------+-------+----------------+
| All | ILIKE | EXCLUDE | i_col | DISTINCT i_col | j_col | DISTINCT j_col |
|-----+-------+---------+-------+----------------+-------+----------------|
|   6 |     4 |       5 |     4 |              2 |     5 |              2 |
+-----+-------+---------+-------+----------------+-------+----------------+
A coluna All nesta saída mostra que quando um curinga não qualificado e não filtrado é especificado para COUNT, a função retorna o número total de linhas na tabela, incluindo linhas com valores NULL. As outras colunas na saída mostram que quando uma coluna ou um curinga com filtragem é especificado, a função exclui linhas com valores NULL.
A próxima consulta usa a função COUNT com a cláusula GROUP BY.
SELECT i_col, COUNT(*), COUNT(j_col)
    FROM basic_example
    GROUP BY i_col
    ORDER BY i_col;
+-------+----------+--------------+
| I_COL | COUNT(*) | COUNT(J_COL) |
|-------+----------+--------------|
|    11 |        3 |            2 |
|    12 |        1 |            1 |
|  NULL |        2 |            2 |
+-------+----------+--------------+
O exemplo a seguir mostra que COUNT(alias.*) retorna o número de linhas que não contêm nenhum valor NULL. A tabela basic_example tem um total de seis linhas, mas três linhas têm pelo menos um valor NULL, e as outras três linhas não têm valores NULL.
SELECT COUNT(n.*) FROM basic_example AS n;
+------------+
| COUNT(N.*) |
|------------|
|          3 |
+------------+
O exemplo a seguir mostra que JSON nulo (VARIANT NULL) é tratado como SQL NULL pela função COUNT.
Crie a tabela e insira dados que contenham SQL NULL e valores nulo JSON:
CREATE OR REPLACE TABLE count_example_with_variant_column (
  i_col INTEGER, 
  j_col INTEGER, 
  v VARIANT);
BEGIN WORK;
INSERT INTO count_example_with_variant_column (i_col, j_col, v) 
  VALUES (NULL, 10, NULL);
INSERT INTO count_example_with_variant_column (i_col, j_col, v) 
  SELECT 1, 11, PARSE_JSON('{"Title": null}');
INSERT INTO count_example_with_variant_column (i_col, j_col, v) 
  SELECT 2, 12, PARSE_JSON('{"Title": "O"}');
INSERT INTO count_example_with_variant_column (i_col, j_col, v) 
  SELECT 3, 12, PARSE_JSON('{"Title": "I"}');
COMMIT WORK;
Neste código SQL, observe o seguinte:
- A primeira instrução INSERT INTO insere um SQL NULL para uma coluna VARIANT e para uma coluna não VARIANT. 
- A segunda instrução INSERT INTO insere um JSON nulo (VARIANT NULL). 
- As duas últimas instruções INSERT INTO inserem valores não NULL VARIANT. 
Exibir os dados:
SELECT i_col, j_col, v, v:Title
    FROM count_example_with_variant_column
    ORDER BY i_col;
+-------+-------+-----------------+---------+
| I_COL | J_COL | V               | V:TITLE |
|-------+-------+-----------------+---------|
|     1 |    11 | {               | null    |
|       |       |   "Title": null |         |
|       |       | }               |         |
|     2 |    12 | {               | "O"     |
|       |       |   "Title": "O"  |         |
|       |       | }               |         |
|     3 |    12 | {               | "I"     |
|       |       |   "Title": "I"  |         |
|       |       | }               |         |
|  NULL |    10 | NULL            | NULL    |
+-------+-------+-----------------+---------+
Mostrar que a função COUNT trata os valores NULL e JSON nulo (VARIANT NULL) como NULLs. Há quatro linhas na tabela. Um tem um SQL NULL e o outro tem um JSON nulo. Ambas as linhas são excluídas da contagem, então a contagem é 2.
SELECT COUNT(v:Title)
    FROM count_example_with_variant_column;
+----------------+
| COUNT(V:TITLE) |
|----------------|
|              2 |
+----------------+