Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como retornar o número de linhas em um resultado de consulta no SQL Server


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 5

A função COUNT_BIG()


T-SQL também tem um COUNT_BIG() função que funciona exatamente como COUNT() , exceto que COUNT() retorna um int tipo de dados e COUNT_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 contenha COUNT(*) , 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 usar COUNT_BIG(*) deve resolver o problema.