Ao trabalhar com bancos de dados, às vezes você deseja descobrir quantas linhas serão retornadas por uma consulta, sem realmente retornar os resultados da consulta. Ou, às vezes, você pode querer descobrir quantas linhas existem em uma determinada tabela.
No SQL Server, você pode usar o
COUNT()
do T-SQL função para retornar o número de linhas que seriam retornadas em uma consulta. Os dados
Aqui estão os dados que usaremos nos exemplos desta página:
SELECIONAR *DE Tarefas;
Resultado:
TaskId TaskName TaskDescription TaskCode------ ------------ --------------- --------1 Feed gatos TBA null 2 Cão de água TBA null 3 Alimente o jardim TBA null 4 Pinte o tapete TBA null 5 Limpe o telhado TBA null 6 Alimente os gatos TBA null
Exemplo – Contar todas as linhas em uma tabela
Aqui está um exemplo de uso do
COUNT()
função para retornar o número total de linhas em uma tabela:SELECT COUNT(*)FROM Tarefas;
Resultado:
6
Isso retorna o número de linhas na tabela porque não fornecemos nenhum critério para restringir os resultados.
Exemplo - Adicionando Critérios
Aqui está um exemplo de contagem de quantas linhas seriam retornadas com base em um determinado critério:
SELECT COUNT(*)FROM TasksWHERE TaskName LIKE '%dog%' OU TaskName LIKE '%cat%';
Resultado:
3
Exemplo – Especifique uma única coluna
Todos os exemplos anteriores usam um asterisco para aplicar a contagem a todas as colunas. Você também tem a opção de especificar uma coluna específica.
Exemplo:
SELECT COUNT(TaskName)FROM Tarefas;
Resultado:
6
Embora este exemplo retorne o mesmo resultado que obtivemos quando usamos o asterisco, isso nem sempre será necessariamente o caso. Por exemplo, veja o que acontece se especificarmos uma coluna diferente:
SELECT COUNT(TaskCode)FROM Tarefas;
Resultado:
0
Nesse caso, obtemos zero, porque essa coluna específica contém valores nulos em todas as linhas.
Exemplo – Distinto
Você pode adicionar o
DISTINCT
argumento para retornar apenas o número de valores exclusivos (não nulos). Você deve ter notado que cada linha em nossa
TaskDescription
coluna contém o mesmo valor (“TBA”). E o TaskName
coluna também tem um valor duplicado (“Feed cats” aparece duas vezes). Isso pode causar problemas se você não quiser que as duplicatas sejam contadas. Veja como fica se aplicarmos o
DISTINCT
argumento para o TaskName
coluna:SELECT COUNT(DISTINCT TaskName)FROM Tasks;
Resultado:
5
E aqui é aplicado contra o
TaskDescription
tabela (onde todos os valores são idênticos):SELECT COUNT(DISTINCT TaskDescription)FROM Tasks;
Resultado:
1
Exemplo - A Cláusula HAVING
Você também pode usar
COUNT()
com o HAVING
cláusula para limitar um conjunto de resultados com base no número de linhas que seriam retornadas. Exemplo:
USE Music;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Artistas arINNER JOIN Álbuns al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 1;
Resultado:
Nome do Artista Contagem de Álbuns------------------------- -----------Allan Holdsworth 2 Devin Townsend 3 Iron Maiden 5 Michael aprende a arrasar 3 Tom Jones 3
Este exemplo usa um banco de dados diferente dos exemplos anteriores. Retorna apenas os artistas que lançaram mais de 1 álbum. Poderíamos alterar esse número quantos álbuns desejarmos:
USE Music;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Artistas arINNER JOIN Álbuns al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 4;
Resultado:
ArtistName Album Count------------------------- -----------Iron Maiden 5A função COUNT_BIG()
T-SQL também tem umCOUNT_BIG()
função que funciona exatamente comoCOUNT()
, exceto queCOUNT()
retorna um int tipo de dados eCOUNT_BIG()
retorna um bigint tipo de dados.
Essa função pode ser útil para exibições indexadas com consultas agrupadas. Você pode descobrir se tentar criar um índice para uma visualização que contenhaCOUNT(*)
, que você receba um erro como este:
Não é possível criar índice na exibição "Music.dbo.AlbumsByArtist" porque usa o COUNT agregado. Em vez disso, use COUNT_BIG.
Nesses casos, alterar a visualização para usarCOUNT_BIG(*)
deve resolver o problema.