MySQL inclui um
COUNT()
função, que permite descobrir quantas linhas seriam retornadas de uma consulta. Essa função faz parte do padrão SQL e pode ser usada com a maioria dos sistemas de gerenciamento de banco de dados relacional. O
COUNT()
A função também pode ser usada para afetar os resultados de uma consulta, se necessário, por exemplo, retornando apenas os resultados que têm uma contagem de linhas maior que um determinado valor. Este artigo contém exemplos de
COUNT()
uso no MySQL. Os dados
Primeiro, aqui estão os dados que usaremos para os exemplos nesta página:
SELECIONAR *DE Tarefas;
Resultado:
+--------+-------------------+----------------- +| TaskId | TaskName | Descrição da Tarefa |+--------+-------------------+-----------------+ | 1 | Fazer jardim | NULO || 2 | Alimentar gatos | NULO || 3 | Pintar telhado | NULO || 4 | Leve cachorro para passear | NULO || 5 | Relaxe | NULO || 6 | Alimentar gatos | NULL |+--------+-------------------+-----------------+
Contar todas as linhas em uma tabela
Você pode usar
COUNT()
para retornar o número total de linhas em uma tabela:SELECT COUNT(*)FROM Tarefas;
Resultado:
+----------+| COUNT(*) |+----------+| 6 |+----------+
Isso retorna o número de linhas na tabela porque não fornecemos nenhum critério para restringir os resultados.
Restringir os resultados
Quando adicionamos um
WHERE
cláusula que restringe o conjunto de resultados, obtemos um número menor:SELECT COUNT(*)FROM TasksWHERE TaskName LIKE '%cat%';
Resultado:
+----------+| COUNT(*) |+----------+| 2 |+----------+
Coluna Única x Asterisco (*)
Todos os exemplos anteriores usam um asterisco para aplicar a contagem a todas as colunas. Como em qualquer consulta, o asterisco é opcional e é usado como curinga para retornar todas as colunas. Então, ao usar o
COUNT()
função, você também tem a opção de fornecer colunas específicas (em oposição a todas as colunas) como argumento. Exemplo:
SELECT COUNT(TaskName)FROM Tarefas;
Resultado:
+-----------------+| COUNT(TaskName) |+-----------------+| 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(TaskDescription)FROM Tasks;
Resultado:
+------------------------+| COUNT(TaskDescription) |+-----------------------------------+| 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 linhas com diferentes valores não NULL
valores. Você deve ter notado que o
TaskName
coluna 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:
+--------------------------+| COUNT(DISTINCT TaskName) |+--------------------------+| 5 |+--------------------------+
Portanto, embora a tabela contenha seis linhas, duas delas são duplicadas. Portanto, esses dois são contados como um, obtemos um resultado de cinco.
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. Aqui está um exemplo usando um conjunto de dados diferente dos exemplos anteriores:
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:
+------------------------+-------------+| ArtistName | Contagem de álbuns |+-------------+-------------+| Donzela de Ferro | 5 || Devin Townsend | 3 || Michael Aprende a Rock | 3 || Tom Jones | 3 || Allan Holdsworth | 2 |+------------------------+-------------+
Esta consulta retorna apenas os artistas que lançaram mais de 1 álbum. Veja o que acontece quando aumentamos o valor noHAVING
cláusula:
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 | Contagem de álbuns |+-------------+-------------+| Donzela de Ferro | 5 |+-------------+-------------+