Voltar para a lista de artigos Artigos
8 minutos de leitura

A função SQL Count Explicada Com 7 Exemplos

Uma das funções agregadas mais úteis em SQL é a função Função COUNT(). Se você é novo em SQL e quer aprender sobre as várias maneiras de usar a função COUNT() funciona com alguns exemplos práticos, este artigo é para você.

A função COUNT() é uma das funções agregadas mais úteis em SQL. Contando o número total de pedidos de um cliente nos últimos dias, o número de visitantes únicos que compraram um bilhete de museu, ou o número de funcionários em um departamento, tudo pode ser feito usando a função COUNT().

Mas, antes de saltarmos para alguns exemplos do mundo real SQL COUNT(), dê uma olhada na sintaxe de amostra para usar a função COUNT(). A sintaxe básica é:

SELECT COUNT([DISTINCT] )
FROM 
WHERE ;

A função COUNT() aparece na parte SELECT da consulta e pode aceitar um nome de coluna como argumento. Opcionalmente, você pode especificar a palavra-chave DISTINCT para contar apenas as ocorrências únicas dos valores. Não se preocupe se você não entender nesta fase; explicarei o uso do DISTINCT com COUNT() mais adiante neste artigo com exemplos.

Vamos mergulhar para entender a função SQL COUNT() e as várias formas de utilizá-la com alguns casos de uso no mundo real. Para demonstração, digamos que você trabalha em uma empresa que vende carros e motocicletas. Você tem à sua disposição o seguinte conjunto de dados.

O products mesa:

product_codeproduct_nameproduct_lineproduct_vendorbuy_price
S10_1678Harley Davidson ChopperMotorcyclesMLD4881
S10_1949Alpine Renault 1300Classic CarsCMC9858
S10_2016Moto Guzzi 1100iMotorcyclesHMC6899
S10_4698Harley Davidson Eagle DragMotorcyclesRSD9102
S10_4757Alfa Romeo GTAClassic Carsnull8568

A tabela tem 5 colunas com os seguintes detalhes:

  1. product_code: Um código único que identifica cada produto.
  2. product_name: O nome do carro ou da motocicleta.
  3. product_line: Uma classificação que identifica se o produto é um carro ou uma motocicleta.
  4. product_vendor: Um código para identificar o fornecedor correspondente para o produto.
  5. buy_price: O preço que o fornecedor cobra pelo produto.

Agora, digamos que você queira descobrir o número de produtos na tabela. É aqui que a função COUNT() pode lhe ajudar. A consulta é algo parecido com isto:

SELECT COUNT(product_code)
FROM products;

A saída:

COUNT(product_code)
5

Nesta consulta, SQL conta todos os valores para product_code na tabela products e devolve o número total. Isto porque passamos a coluna product_code como argumento para nossa função COUNT(). Alternativamente, se você quiser apenas calcular o número de filas no products mesa, você pode fazer algo como isto:

SELECT COUNT(*)
FROM products;

A saída:

COUNT(*)
5

Aqui, usamos "*" como argumento para a função, que simplesmente diz a SQL para contar todas as linhas da tabela.

Agora, digamos que você queira contar todas as linhas de produtos na tabela. Com base no que você aprendeu no exemplo anterior, você provavelmente escreveria algo como isto.

SELECT COUNT(product_line)
FROM products;

A saída:

COUNT(product_line)
5

A consulta retornou 5 como saída porque SQL contou um valor de product_line para cada linha da tabela. É importante notar que a função COUNT() não conta para duplicatas por padrão. Por exemplo, a função products A tabela tem apenas dois valores únicos para a coluna product_line - "Motocicletas" e "Carros Clássicos" - mas nossa consulta ainda retornou 5 como o valor. Portanto, se você quiser contar apenas os valores únicos na tabela, você tem que usar a palavra-chave DISTINCT com sua função COUNT().

A consulta:

SELECT COUNT(DISTINCT product_line)
FROM products;

A saída:

COUNT(DISTINCT product_line)
2

Nesta consulta, já que especificamos explicitamente a palavra-chave DISTINCT no argumento da função COUNT(), SQL conta apenas os valores únicos de product_line.

Você também pode usar as condições na cláusula WHERE para contar apenas linhas específicas. Por exemplo, digamos que você queira descobrir o número de produtos que pertencem à linha de produtos "Motocicletas". Para fazer isso, você pode usar a seguinte consulta:

SELECT COUNT(product_code)
FROM products
WHERE product_line = ‘Motorcycles’;

A saída:

COUNT(product_code)
3

Aqui, SQL primeiro filtra todas as linhas onde o valor de product_line é "Motocicletas". Em seguida, conta o número de códigos de produtos.

Uma coisa importante a ser observada é que a função SQL COUNT() não considera NULL durante a contagem. Na função products o valor product_vendor para a tabela product_code "S10_4757" é NULL. Portanto, a seguinte consulta retorna o valor 4 e não 5.

SELECT COUNT(product_vendor)
FROM products;

A saída:

COUNT(product_vendor)
4

Enquanto os valores "HLD", "CMC", "HMD", e "RSD" estão incluídos na contagem, NULL é excluído.

A CONTA SQL() Com um GRUPO POR Cláusula

Se você trabalha (ou aspira a trabalhar) como analista e usa SQL para fazer análise de dados, então na maioria dos casos você usa a função COUNT() com uma cláusula GROUP BY.

A cláusula GROUP BY em SQL é usada para agregar (agrupar) dados em grupos para ajudar a calcular as métricas agregadas. As funções agregadas disponíveis em SQL são COUNT(), SUM(), AVG(), MIN(), e MAX(). Estas funções retornam um único valor para várias linhas. A agregação é importante porque pode nem sempre ser viável para você percorrer cada linha para gerar insights.

Agrupar clientes com base em suas necessidades e comportamentos específicos (segmentação), agrupar produtos em diferentes tipos, ou agrupar várias pessoas com base em sua renda, são todos exemplos de agregação.

Vamos dar um exemplo usando a função COUNT() para entender melhor isto. Digamos que você queira calcular o número de produtos em cada linha de produtos.

A consulta:

SELECT product_line,
	 COUNT(product_code)
FROM products
GROUP BY product_line;

A produção:

product_lineCOUNT(product_code)
Motorcycles3
Classic Cars2

Nesta consulta, SQL primeiro obtém todos os valores únicos para product_line como a primeira coluna, depois conta o número de produtos (product_code) pertencentes a cada um deles. Em resumo, SQL agrega todas as linhas por linha de produto e depois usa a função agregar (COUNT() neste caso) para calcular o número de produtos para cada linha de produto.

É importante especificar todas as colunas (exceto a parte da função agregada) que você usa na parte SELECT da consulta na cláusula GROUP BY. Caso contrário, o SQL lança um erro. Você pode ler este artigo para entender erros comuns com as cláusulas GROUP BY.

Até agora, os exemplos que mostrei neste artigo têm a função COUNT() na parte SELECT da consulta. Entretanto, COUNT() é uma função versátil; você pode usá-la de várias maneiras e em diferentes partes da consulta. Vamos dar uma olhada.

A CONTA SQL() Com Condição em uma Cláusula de HAVING

A cláusula HAVING é utilizada para filtrar grupos com base nas condições para a função agregada. Por exemplo, digamos que você queira retornar somente os grupos agregados com uma contagem acima de um certo número.

Com nosso conjunto de dados, imagine que você queira olhar apenas para aquelas linhas de produtos com mais de 2 produtos.

A consulta:

SELECT product_line,
	   COUNT(product_code)
FROM products
GROUP BY product_line
HAVING COUNT(product_code)>2;

A saída:

product_lineCOUNT(product_code)
Motorcycles3

A consulta funciona da mesma forma que a consulta anterior, na qual os grupos SQL são agrupados com base em valores únicos de product_line e depois retorna o número de produtos pertencentes a cada linha de produto usando a função COUNT(). Entretanto, como optamos por manter apenas as linhas de produtos com mais de dois produtos, não temos a linha de produtos "Classic Cars" (que tem apenas 2 produtos) nos resultados.

A CONTA SQL() em uma Cláusula DE ORDEM POR

Você também pode ter um caso em que deseja visualizar todas as linhas de produtos, mas quer organizá-las pelo número de produtos que elas têm. Aqui, precisamos usar a função COUNT() na cláusulaORDER BY.

A consulta:

SELECT   product_line,
	   COUNT(product_code)
FROM     products
ORDER BY COUNT(product_line);

A saída:

product_lineCOUNT(product_code)
Classic Cars2
Motorcycles3

Nesta consulta, SQL retorna linhas de produtos únicas como grupos e o número de produtos em cada linha de produtos como a contagem. Entretanto, devido à cláusula ORDER BY, os resultados são dispostos em ordem ascendente pela função COUNT().

O SQL COUNT() Com Condição em uma Cláusula WHERE

A função COUNT() não pode ser usada diretamente em uma cláusula WHERE. Assim, por exemplo, se você quiser recuperar todos os detalhes de produtos que pertencem a uma linha de produtos com pelo menos 3 produtos, você não pode usar esta consulta.

SELECT *
FROM products
WHERE COUNT(product_line)>=3;

A saída:

ERROR 1111 (HY000): Invalid use of group function

Você também não pode realizar isto apenas com as cláusulas GROUP BY e HAVING diretamente. Isto porque isso só lhe dá linhas agrupadas, mas não todos os detalhes sobre os produtos, como requerido aqui.

Em vez disso, você tem que usar algo conhecido como subconsulta (uma consulta dentro da consulta principal). Este é o aspecto de sua consulta.

SELECT *
FROM products
WHERE product_line in (SELECT product_line
    			   FROM products
			   GROUP BY product_line
   HAVING COUNT(product_code)>=3);

A saída:

product_codeproduct_nameproduct_lineproduct_vendorbuy_price
S10_1678Harley Davidson ChopperMotorcyclesMLD4881
S10_2016Moto Guzzi 1100iMotorcyclesHMC6899
S10_4698Harley Davidson Eagle DragMotorcyclesRSD9102

Pronto para usar a função COUNT()?

Agora que você leu este artigo, você deve ter uma compreensão decente de como usar a função COUNT(). Uma vez que você comece a usar a função em suas consultas, sua compreensão melhora ainda mais.

Se você é novo em SQL e quer criar uma base sólida antes de saltar para trabalhos práticos, eu recomendo esta faixa de LearnSQL.com.br. Gosto particularmente deste aqui porque ele oferece uma cobertura abrangente de conceitos básicos e lhe dá uma base para o crescimento de sua carreira.

A prática desempenha um enorme papel em seu aprendizado quando se trata de SQL. Portanto, continue praticando diferentes tipos de consultas, expanda seus limites e continue crescendo.

Naturalmente, o primeiro passo é o mais difícil. O bom é que não há falta de grande material de aprendizagem sobre LearnSQL.com.br para ajudá-lo em sua jornada. Então, comece hoje!