Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL COUNT() – Obtenha o número de linhas a serem retornadas por uma consulta


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 no HAVING 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 |+-------------+-------------+