Mysql - função count
Tecnologia da Informação

Mysql - função count


O artigo apresenta 8 exemplos de como utilizar a função de agrupamento "count", das seguintes formas:
Caso tenha interesse faça o download dos scripts ou veja no GitHub. 

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".

Solução
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:

FUNÇÃO COUNT(nome_da_coluna)


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(nome_da_coluna) FROM nome_da_tabela;


2º Exemplo
Exibir a quantidade de registros onde o código do serviço seja do tipo "A".


Solução
Para fazer a contagem, executamos a sentença abaixo:

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
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
Distribuição por tipo de serviç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";
Solução

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
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,
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
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:



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:





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.



loading...

- Oracle - Calcular Total /subtotal Com Rollup
Neste artigo, vamos mostrar 3 exemplos de como utilizar a função "SUM" acompanhada do comando "ROLLUP" para calcular o subtotal / total em uma consulta. Caso tenha interesse, faça o download ou veja os scripts deste artigo...

- Postgresql - Calcular Subtotal / Total - Equivalente Ao With Rollup No Mysql
Neste artigo, vamos mostrar 2 exemplos de como utilizar a função "SUM" para calcular o subtotal / total em uma consulta. Para quem usa o Mysql, a consulta que vamos fazer é semelhante ao "WITH ROLLUP". Caso ainda não conheça a função...

- Mysql Sum - Soma
A função SUM retorna a soma de valores de uma coluna. SINTAXE SELECT SUM(nome_da_coluna) FROM nome_da_tabela; Para os 6 exemplos abaixo, utilizaremos a tabela "tb_fornecedor". Veja a imagem abaixo: Caso tenha interesse faça o download dos...

- Mysql - Extrair Data Com Extract
A função extract extrai parte de uma data ou intervalo. Vamos descrever 3 exemplos com a função extract. 1º Exemplo: vamos extrair partes da data da coluna "data_exame" da tabela "tb_exame". A tabela contém informações da realização...

- Postgresql - Extrair Parte De Uma Data Com Extract
A função extract extrai parte de uma data ou intervalo. Ela é equivalente a função date_part. Vamos descrever 3 exemplos com a função extract. Caso tenha interesse faça download dos exemplos ou veja no GitHub. 1º Exemplo: vamos extrair partes...



Tecnologia da Informação








.