A função COUNT() pode ser usada para encontrar dados redundantes ou determinar a quantidade de vezes que uma informação se encontra inserida em uma tabela.
Pode vir acompanhada da cláusula GROUP BY para agrupar as ocorrências, na lista — o que torna o relatório mais fácil de compreender.
Se esta situação for um problema para você, leia o artigo Como eliminar registros duplicados no MySQL, para entender como resolvê-la.
Neste texto, vou usar exemplos com a seguinte tabela (vista parcialmente):
SELECT * FROM clientesEstaduais LIMIT 10; +----+------------------+---------------+--------------+---------------+ | id | NomeCliente | RegiaoCliente | DataCadastro | CreditCliente | +----+------------------+---------------+--------------+---------------+ | 1 | Kiara Meadows | SP | 2010-11-30 | 2614 | | 2 | Iris Moreno | SP | 2013-03-05 | 13818 | | 3 | Camilla Klein | GO | 2011-04-08 | 4954 | | 4 | Stephanie Thomas | BA | 2014-10-06 | 1678 | | 5 | Emerald Alston | PE | 2013-12-02 | 12574 | | 6 | Nevada Phelps | PR | 2014-07-26 | 5080 | | 7 | Nita Solomon | MG | 2013-04-15 | 2267 | | 8 | Suki Ayers | MG | 2014-10-08 | 12884 | | 9 | Camille Ray | RS | 2013-07-11 | 13807 | | 10 | Chloe Gibbs | CE | 2012-11-06 | 8165 | +----+------------------+---------------+--------------+---------------+ 10 rows in set (0.00 sec)
A tabela clientesEstaduais
, pode ser encontrada aqui.
A função COUNT() do MySQL
A sintaxe da função é simples: COUNT(expressão)
.
Veja como contar a quantidade de registros da tabela clientesEstaduais:
SELECT COUNT(*) AS "Qtd. de registros" FROM clientesEstaduais; +-------------------+ | Qtd. de registros | +-------------------+ | 100 | +-------------------+
Veja outras perguntas que podem ser respondidas com o uso da função COUNT() aliada à cláusula WHERE
Quantos clientes são do estado do Paraná (PR)?
SELECT COUNT(*) AS "Clientes do PR" FROM clientesEstaduais WHERE RegiaoCliente = 'PR'; +----------------+ | Clientes do PR | +----------------+ | 6 | +----------------+
Quantos clientes foram cadastros em Agosto (em qualquer dia/ano)?
SELECT COUNT(*) AS "Clientes de Agosto" FROM clientesEstaduais WHERE MONTH(DataCadastro)='08'; +--------------------+ | Clientes de Agosto | +--------------------+ | 12 | +--------------------+
Quantos clientes têm mais de 15 mil em créditos?
SELECT COUNT(*) AS "> 15.000" FROM clientesEstaduais WHERE CreditCliente > 15000; +----------+ | > 15.000 | +----------+ | 19 | +----------+
A função COUNT(), tem 2 formas.
A que temos usado, até agora, serve para contar as linhas da tabela: COUNT(*)
.
A outra forma usa uma expressão, como argumento e é usada para contar os valores não NULL ou non-NULL.
Em outras palavras, registros que contenham o campo NULL, não entram na conta, quando a expressão é dada como argumento.
Veja um exemplo:
SELECT COUNT(*) AS "Núm. de clientes", -> COUNT(DataCadastro) AS "Clientes cadastrados" -> FROM clientesEstaduais;
Uma vez que 2 clientes têm data de cadastro vazia (DataCadastro = NULL
), a segunda coluna só irá contar 98:
+-------------------+----------------------+ | Núm. de clientes | Clientes cadastrados | +-------------------+----------------------+ | 100 | 98 | +-------------------+----------------------+
Como usar COUNT() com a cláusula GROUP BY
Além de ver os valores, você pode listar os registros, para ter um relatório mais rico.
No exemplo, abaixo, veja como obter a relação de estados presentes no cadastro de clientes, a quantidade de clientes por estado e em ordem descendente:
SELECT RegiaoCliente AS "Estados", -> COUNT(*) AS "Núm. de clientes" -> FROM clientesEstaduais -> GROUP BY RegiaoCliente -> ORDER BY COUNT(*) DESC; +---------+-------------------+ | Estados | Núm. de clientes | +---------+-------------------+ | SP | 30 | | MG | 18 | | BA | 10 | | RJ | 9 | | PR | 6 | | RS | 6 | | PE | 5 | | CE | 5 | | GO | 5 | | MA | 3 | | PA | 2 | | PB | 1 | +---------+-------------------+
No mês de Agosto, em quais datas houve maior número de cadastros?
SELECT DataCadastro, -> COUNT(*) FROM clientesEstaduais -> WHERE MONTH(DataCadastro)='08' -> GROUP BY DataCadastro -> ORDER BY COUNT(*) DESC; +--------------+----------+ | DataCadastro | COUNT(*) | +--------------+----------+ | 2016-08-21 | 2 | | 2016-08-15 | 2 | | 2016-08-11 | 2 | | 2016-08-19 | 1 | | 2016-08-16 | 1 | | 2016-08-20 | 1 | | 2016-08-13 | 1 | | 2016-08-17 | 1 | | 2016-08-09 | 1 | +--------------+----------+
4 replies on “Como contar ocorrências e encontrar informações redundantes no MySQL”
Me responde essa: Quantas ocorrências de estados distintos tem na tabela. Não interessa a quantidade de ocorrências de um estado, se ocorre 1 ou 1000 vezes deve ser contato como 1. Sem ter que varrer a tabela, quero um resultado único. Igual um COUNT.
SELECT COUNT(DISTINCT(RegiaoCliente) AS “Qnt Distinta de regioes” FROM clientesEstaduais;
como conto numa linha de 15 numeros quantos numeros eu tenho? e impares?
Bom dia, achei legal sua publicação, gostaria de saber se é possível e como devo fazer para por exemplo em uma dada lista de registros igual a esse que você elaborou contar por exemplo quantas vezes ocorreu SP em seguida sendo no minimo 3 vezes consecutivas, partindo de comparar um registro com o seu sequente?