- COUNT(*);
- COUNT(nome_da_coluna);
- COUNT COM GROUP BY;
- COUNT(DISTINCT(nome_da_coluna));
Nestes exemplos, vamos utilizar a tabela "tb_ordem_servico" que armazena informações sobre ordens de serviço (solicitações de serviços). Exibimos a seguir a imagem da tabela e a descrição das colunas:
- cod_ordem: código da ordem de serviço;
- cod_servico: código do serviço que será prestado;
- data_inicial: data da solicitação da ordem de serviço;
- data_final: data de encerramento da ordem de serviço;
FUNÇÃO COUNT(*)
A função COUNT(*) retorna o número de registros (linhas) de uma tabela.
SINTAXE
SELECT COUNT(*) FROM nome_da_tabela;
1º Exemplo
Exibir quantidade de registros da tabela "tb_ordem_servico".
Para exibir a quantidade de registros, vamos executar a sentença abaixo:
SELECT COUNT(*) FROM tb_ordem_servico;
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
O nome da coluna recebeu o nome da função "count". Caso seja preciso alterar o nome da coluna, por exemplo, para "quantidade", crie uma alias "apelido". Para isso coloque um AS após a função COUNT(*).
SELECT COUNT(*) AS quatidade FROM tb_ordem_servico;
Após a execução do comando, o nome da coluna será exibido como "quantidade", veja a imagem abaixo:
A função COUNT(nome_da_coluna) retorna o número valores de uma coluna. Valores nulos não entram na contagem.
SINTAXE
SELECT
COUNT(cod_servico) AS quantidade
FROM tb_ordem_servico
WHERE cod_servico = 'A';
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
3º Exemplo
O nome da coluna recebeu o nome da função "count". Caso seja preciso alterar o nome da coluna, por exemplo, para "quantidade", crie uma alias "apelido". Para isso coloque um AS após a função COUNT(*).
SELECT COUNT(*) AS quatidade FROM tb_ordem_servico;
Após a execução do comando, o nome da coluna será exibido como "quantidade", veja a imagem abaixo:
FUNÇÃO COUNT(nome_da_coluna)
SINTAXE
SELECT COUNT(nome_da_coluna) FROM nome_da_tabela;
SELECT
COUNT(cod_servico) AS quantidade
FROM tb_ordem_servico
WHERE cod_servico = 'A';
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
3º Exemplo
Exibir a quantidade de ordens de serviços que já foram finalizadas.
Solução
As ordens de serviços finalizadas são aquelas que possuem uma data de encerramento. Logo vamos utilizar a função COUNT na coluna data_final
Para fazer a contagem, executamos a sentença abaixo:
SELECT
COUNT(data_final) AS quantidade
FROM tb_ordem_servico;
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
Observação: perceba que os valores nulos não são incluídos na contagem
4º Exemplo
Solução
As ordens de serviços finalizadas são aquelas que possuem uma data de encerramento. Logo vamos utilizar a função COUNT na coluna data_final
Para fazer a contagem, executamos a sentença abaixo:
SELECT
COUNT(data_final) AS quantidade
FROM tb_ordem_servico;
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
4º Exemplo
Exibir a quantidade de ordens de serviços que não foram finalizadas.
Solução
As ordens de serviços não finalizadas são aquelas que ainda não possuem data de encerramento, logo vamos fazer a contagem dos registros onde o valor a coluna "data_final" seja nulo.
Como precisamos contar valores nulos, vamos utilizar "COUNT(*)", pois COUNT(nome_da_coluna) ignora valores nulos.
SELECT
COUNT(*) AS quantidade
FROM tb_ordem_servico WHERE data_final IS NULL;
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
5º Exemplo
Para exibir a distribuição por tipo de serviço vamos agrupar os dados da coluna "cod_servico" através do comando "group by".
SELECT
cod_servico,
COUNT(cod_servico) AS quantidade
FROM tb_ordem_servico
GROUP BY cod_servico;
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
6º Exemplo
COUNT(*) AS qtd_os
FROM tb_ordem_servico
GROUP BY date_format(data_final, '%m/%Y');
Após a execução do comando, os valores nulos entram na contagem.
Podemos colocar a mensagem "Pendente" para indicar a quantidade de ordens de serviço que não possuem data de encerramento.
SELECT
CASE WHEN data_final IS NOT NULL
THEN date_format(data_final, '%m/%Y')
ELSE 'Pendente'
END mes_ano,
COUNT(*) AS qtd_os
FROM tb_ordem_servico
GROUP BY mes_ano;
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
Se não quisermos exibir a contagem de valores nulos, utilizamos um filtro no "WHERE":
SELECT
date_format(data_final, '%m/%Y') AS mes_ano,
COUNT(data_final) AS qtd_os
FROM tb_ordem_servico
WHERE data_final IS NOT NULL
GROUP BY mes_ano;
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
Caso você queira ordenar por ano e mês em ordem crescente, utilize o comando "ORDER BY".
Repare que no "ORDER BY" foi invertidos os parâmetros do date_format (destacado em azul): para ano e depois mês. Para que seja exibido primeiro os meses de 2013 e depois o meses de 2014.
SELECT
date_format(data_final, '%m/%Y') AS mes_ano,
COUNT(*) AS qtd_os_finalizadas
FROM tb_ordem_servico
WHERE data_final IS NOT NULL
GROUP BY date_format(data_final, '%m/%Y')
ORDER BY date_format(data_final, '%Y/%m');
Após executar a sentença, teremos o resultado, conforme exibido na imagem a seguir:
7º Exemplo
Solução
As ordens de serviços não finalizadas são aquelas que ainda não possuem data de encerramento, logo vamos fazer a contagem dos registros onde o valor a coluna "data_final" seja nulo.
Como precisamos contar valores nulos, vamos utilizar "COUNT(*)", pois COUNT(nome_da_coluna) ignora valores nulos.
SELECT
COUNT(*) AS quantidade
FROM tb_ordem_servico WHERE data_final IS NULL;
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
Distribuição por tipo de serviço:
Solução- Quantidade de solicitações para o serviço "A";
- Quantidade de solicitações para o serviço "B";
- Quantidade de solicitações para o serviço "C";
Para exibir a distribuição por tipo de serviço vamos agrupar os dados da coluna "cod_servico" através do comando "group by".
SELECT
cod_servico,
COUNT(cod_servico) AS quantidade
FROM tb_ordem_servico
GROUP BY cod_servico;
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
Quantidade de ordens finalizadas por mês e ano (mm/aaaa):
Solução
Para exibir a distribuição por mês e ano vamos utilizar a funcão "COUNT(nome_da_coluna)" e agrupar os dados da coluna através do comando "group by".
A coluna utilizada será a "data_final", pois indica a data de encerramento da ordem de serviço.
A função "date_format" é utilizada para exibir a data no formato (mm/aaaa).
SELECT
CASE WHEN data_final IS NOT NULL
THEN date_format(data_final, '%m/%Y')
END mes_ano,
COUNT(data_final) AS qtd_os
FROM tb_ordem_servico
GROUP BY mes_ano;
Após a execução da sentença obtemos o seguite resultado.
Observação: repare que os valores nulos não entraram na contagem, pois utilizamos a função COUNT(nome_da_coluna).
Para que os valores nulos entrem na contagem vamos utilizar a função COUNT(*)
SELECT
date_format(data_final, '%m/%Y') AS mes_ano,Solução
Para exibir a distribuição por mês e ano vamos utilizar a funcão "COUNT(nome_da_coluna)" e agrupar os dados da coluna através do comando "group by".
A coluna utilizada será a "data_final", pois indica a data de encerramento da ordem de serviço.
A função "date_format" é utilizada para exibir a data no formato (mm/aaaa).
SELECT
CASE WHEN data_final IS NOT NULL
THEN date_format(data_final, '%m/%Y')
END mes_ano,
COUNT(data_final) AS qtd_os
FROM tb_ordem_servico
GROUP BY mes_ano;
Após a execução da sentença obtemos o seguite resultado.
Observação: repare que os valores nulos não entraram na contagem, pois utilizamos a função COUNT(nome_da_coluna).
Para que os valores nulos entrem na contagem vamos utilizar a função COUNT(*)
SELECT
COUNT(*) AS qtd_os
FROM tb_ordem_servico
GROUP BY date_format(data_final, '%m/%Y');
Após a execução do comando, os valores nulos entram na contagem.
SELECT
CASE WHEN data_final IS NOT NULL
THEN date_format(data_final, '%m/%Y')
ELSE 'Pendente'
END mes_ano,
COUNT(*) AS qtd_os
FROM tb_ordem_servico
GROUP BY mes_ano;
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
Se não quisermos exibir a contagem de valores nulos, utilizamos um filtro no "WHERE":
SELECT
date_format(data_final, '%m/%Y') AS mes_ano,
COUNT(data_final) AS qtd_os
FROM tb_ordem_servico
WHERE data_final IS NOT NULL
GROUP BY mes_ano;
Após a execução do comando, teremos o resultado, conforme exibido na imagem a seguir:
Caso você queira ordenar por ano e mês em ordem crescente, utilize o comando "ORDER BY".
Repare que no "ORDER BY" foi invertidos os parâmetros do date_format (destacado em azul): para ano e depois mês. Para que seja exibido primeiro os meses de 2013 e depois o meses de 2014.
SELECT
date_format(data_final, '%m/%Y') AS mes_ano,
COUNT(*) AS qtd_os_finalizadas
FROM tb_ordem_servico
WHERE data_final IS NOT NULL
GROUP BY date_format(data_final, '%m/%Y')
ORDER BY date_format(data_final, '%Y/%m');
Após executar a sentença, teremos o resultado, conforme exibido na imagem a seguir:
7º Exemplo
Quantidade de ordens finalizadas por mês e ano (mm/aaaa) e por tipo de serviço.
Solução:
Perceba que neste exemplo, estamos fazendo o agrupamento de 2 colunas. Vamos utilizar o COUNT(*) para a contagem, e o "group by" para o agrupamento.
SELECT
date_format(data_final, '%m/%Y') AS mes_ano,
cod_servico,
COUNT(*) AS qtd_os
FROM tb_ordem_servico
WHERE data_final IS NOT NULL
GROUP BY mes_ano, cod_servico;
Após executar a sentença, teremos o resultado, conforme exibido na imagem a seguir:
Solução:
Perceba que neste exemplo, estamos fazendo o agrupamento de 2 colunas. Vamos utilizar o COUNT(*) para a contagem, e o "group by" para o agrupamento.
SELECT
date_format(data_final, '%m/%Y') AS mes_ano,
cod_servico,
COUNT(*) AS qtd_os
FROM tb_ordem_servico
WHERE data_final IS NOT NULL
GROUP BY mes_ano, cod_servico;
Após executar a sentença, teremos o resultado, conforme exibido na imagem a seguir:
Caso você queira ordenar em crescente o ano/mês e o serviço, utilize o comando "ORDER BY".
Após executar a sentença, teremos o resultado, conforme exibido na imagem a seguir:
SELECT
date_format(data_final, '%m/%Y') AS mes_ano,
cod_servico,
COUNT(*) AS qtd_os_finalizadas
FROM tb_ordem_servico
WHERE data_final IS NOT NULL
GROUP BY date_format(data_final, '%m/%Y'), cod_servico
ORDER BY date_format(data_final, '%Y/%m'), cod_servico;
Após a execução da consulta, será exibido o resultado a seguir:
Após executar a sentença, teremos o resultado, conforme exibido na imagem a seguir:
SELECT
date_format(data_final, '%m/%Y') AS mes_ano,
cod_servico,
COUNT(*) AS qtd_os_finalizadas
FROM tb_ordem_servico
WHERE data_final IS NOT NULL
GROUP BY date_format(data_final, '%m/%Y'), cod_servico
ORDER BY date_format(data_final, '%Y/%m'), cod_servico;
Após a execução da consulta, será exibido o resultado a seguir:
FUNÇÃO COUNT(DISTINCT(nome_da_coluna))
SINTAXE
SELECT COUNT(DISTINCT(nome_da_coluna)) FROM nome_da_tabela;
Neste exemplo, vamos explicar como utilizar a função "distinct" dentro da função "count".
Utilizando a função "count" desta forma, os valores iguais só são contados uma vez.
Pareceu complicado? Veja o exemplo.
8º Exemplo
Observação: Incluímos a coluna cliente na tabela "tb_ordem_servico".
Exibir quantas empresas fizeram solicitação de ordem de serviço.
Solução:
Se observarmos a coluna "cliente" veremos que 3 empresas fizeram solicitação a "Padaria P", a "Marcenaria M" e o "HOSPITAL H".
Para retornar o resultado através de comando SQL executamos a sentença abaixo:
SELECT COUNT(DISTINCT(cliente)) FROM tb_ordem_servico;
Após executar a sentença, teremos o resultado, conforme exibido na imagem a seguir:
Faça um comentário no final do artigo, suas sugestões ou críticas serão bem-vindas.
Pareceu complicado? Veja o exemplo.
8º Exemplo
Observação: Incluímos a coluna cliente na tabela "tb_ordem_servico".
Exibir quantas empresas fizeram solicitação de ordem de serviço.
Solução:
Se observarmos a coluna "cliente" veremos que 3 empresas fizeram solicitação a "Padaria P", a "Marcenaria M" e o "HOSPITAL H".
Para retornar o resultado através de comando SQL executamos a sentença abaixo:
SELECT COUNT(DISTINCT(cliente)) FROM tb_ordem_servico;
Após executar a sentença, teremos o resultado, conforme exibido na imagem a seguir:
Caramba... Me ajudou muito! Obrigado!
ResponderExcluirCom base nesse seu ultimo exemplo, como fazer para saber a quantidade ordem de serviços feita por cada cliente?
ResponderExcluirEste comentário foi removido pelo autor.
ExcluirSELECT COUNT(*) as qtd ,cliente FROM tb_ordem_servico group by cliente;
Excluirmt obrigado!
ResponderExcluirMestre, Deus abençoe você por isso, muito obrigado mesmo, ajudou demais.....Valeu e continue pelo amor de Deus....
ResponderExcluirE eu que achei que era ferão.
ResponderExcluirParabéns, também me ajudou muito.
como pegar somente clientes com 2 ou mais ordens de serviços ?
ResponderExcluirEspero que o script abaixo ajude, e obrigada por acompanhar o blog.
Excluir/*CRIAR A TABELA tb_ordem_servico*/
ExcluirCREATE TABLE tb_ordem_servico
(
cliente_id integer not null,
cod_ordem integer,
cod_servico character varying(1),
data_inicial date,
data_final date
);
/*INSERIR OS REGISTROS NA TABELA tb_ordem_servico*/
INSERT INTO tb_ordem_servico(cliente_id, cod_ordem, cod_servico, data_inicial, data_final)
VALUES
(10, 34330, 'A', '2013-11-10', '2013-11-12'),
(10, 34331, 'A', '2013-12-06', '2013-12-08'),
(10, 34332, 'A', '2013-01-05', '2014-01-06'),
(15, 34333, 'A', '2014-01-30', NULL),
(92, 34334, 'B', '2013-11-15', '2013-11-17'),
(80, 34335, 'B', '2013-12-18', '2013-12-19'),
(80, 34336, 'B', '2013-01-05', '2014-01-06'),
(91, 34337, 'B', '2014-01-28', NULL),
(92, 34338, 'C', '2013-11-08', '2013-11-11'),
(92, 34339, 'C', '2013-12-05', '2013-12-08'),
(92, 34340, 'C', '2013-01-15', '2014-01-17'),
(95, 34341, 'C', '2014-01-27', NULL);
/*
SELECIONAR OS CLIENTES COM 2 OU MAIS ORDENS DE SERVIÇO:
ESSA CONDIÇÃO E DETERMINADA PELO "HAVING COUNT(cliente_id) >= 2"
*/
SELECT
cliente_id,
COUNT(cliente_id) AS quantidade
FROM tb_ordem_servico
GROUP BY cliente_id
HAVING COUNT(cliente_id) >= 2
ORDER BY cliente_id;
Tem como eu limitar a quantidade de registros a serem inseridos?
ResponderExcluirExemplo: tenho um sistema de reservas de carros, crud simples... quero que o sistema cadastre somente 3 reservas se tentar incluir a 4 reserva o sistema apresenta uma mensagem avisando que não tem mais reservas disponíveis...
tem como contar a quantidade de um resultado que comeca com a primeira letra H por exemplo?
ResponderExcluirUm post tão antigo e de tão grande ajuda. Muito obrigado meu amigo, me ajudou muito. Amarildo - Uberlândia MG
ResponderExcluirOLá, esse post é perfeito. Muito bom mesmo. Aproveiro para perguntar como usar o count com array. Por exemplo tenho uma coluna que armazenas alguns procedimentos médicos. Como usar o count para quantificar esses procedimentos?
ResponderExcluir