MySQL TENDO CONTAGEM

Resumo : neste tutorial, você aprenderá como usar o MySQL HAVING COUNTpara filtrar grupos com base no número de itens em cada grupo.

Introdução ao MySQL HAVING COUNT

No MySQL, a cláusula GROUP BY organiza as linhas em grupos. Ao combinar a GROUP BYcláusula com a função COUNT , você obterá os grupos e o número de itens em cada grupo.

Para filtrar os grupos com base no número de itens em cada grupo, você usa a cláusula HAVING e a COUNTfunção.

O seguinte ilustra a sintaxe básica para usar a HAVINGcláusula com a COUNTfunção para filtrar grupos:

SELECT 
  c1, 
  COUNT(c2) 
FROM 
  table_1 
GROUP BY 
  c1
HAVING 
  COUNT(c2)...Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Observe que você não pode atribuir um alias à COUNT(column_2)cláusula SELECTe usar o alias da coluna na HAVINGcláusula assim:

SELECT 
  c1, 
  COUNT(c2) count_c2
FROM 
  table_1 
GROUP BY 
  c1
HAVING 
  count_c2...Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A razão é que o MySQL avalia a HAVINGcláusula antes da SELECTcláusula. Portanto, no momento em que o MySQL avaliou a HAVINGcláusula, ele não conhece o alias da coluna count_c2porque ainda não avaliou a SELECTcláusula.

Exemplo MySQL HAVING COUNT

Tomaremos alguns exemplos de uso da HAVING COUNTcláusula

1) Exemplo simples de HAVING COUNT

Primeiro, crie uma nova tabela de vendas que tenha três colunas sale_id, product_namee sale_amount:

CREATE TABLE sales (
    id INT AUTO_INCREMENT,
    product_name VARCHAR(50) NOT NULL,
    sale_amount DECIMAL(10, 2) NOT NULL,
    PRIMARY KEY(id)
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, insira algumas linhas na tabela de vendas:

INSERT INTO sales (product_name, sale_amount)
VALUES
    ('Product A', 100.50),
    ('Product B', 75.25),
    ('Product A', 120.75),
    ('Product C', 50.00),
    ('Product B', 90.80);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, conte o número de vendas por produto:

SELECT product_name, COUNT(id)
FROM sales
GROUP BY product_name;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A consulta mostra os nomes dos produtos e o número de vendas de cada produto:

+--------------+-----------+
| product_name | COUNT(id) |
+--------------+-----------+
| Product A    |         2 |
| Product B    |         2 |
| Product C    |         1 |
+--------------+-----------+
3 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para descobrir qual produto teve uma venda, você usa a HAVINGcláusula com a COUNTfunção da seguinte forma:

SELECT 
  product_name, 
  COUNT(id) 
FROM 
  sales 
GROUP BY 
  product_name 
HAVING 
  COUNT(id) = 1;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+--------------+-----------+
| product_name | COUNT(id) |
+--------------+-----------+
| Product C    |         1 |
+--------------+-----------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Da mesma forma, você pode encontrar os produtos que tiveram mais de uma venda utilizando o operador >da HAVINGcláusula:

SELECT 
  product_name, 
  COUNT(id) 
FROM 
  sales 
GROUP BY 
  product_name 
HAVING 
  COUNT(id) > 1;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+--------------+-----------+
| product_name | COUNT(id) |
+--------------+-----------+
| Product A    |         2 |
| Product B    |         2 |
+--------------+-----------+
2 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

2) Exemplo prático de HAVING com COUNT

Usaremos a tabela customerse ordersas tabelas do banco de dados de exemplo :

A consulta a seguir usa a HAVINGcláusula com a COUNTfunção para obter os clientes que fizeram mais de quatro pedidos:

SELECT 
  customerName, 
  COUNT(*) order_count 
FROM 
  orders 
  INNER JOIN customers using (customerNumber) 
GROUP BY 
  customerName 
HAVING 
  COUNT(*) > 4 
ORDER BY 
  order_count;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+------------------------------+-------------+
| customerName                 | order_count |
+------------------------------+-------------+
| Australian Collectors, Co.   |           5 |
| Danish Wholesale Imports     |           5 |
| Dragon Souveniers, Ltd.      |           5 |
| Down Under Souveniers, Inc   |           5 |
| Reims Collectables           |           5 |
| Mini Gifts Distributors Ltd. |          17 |
| Euro+ Shopping Channel       |          26 |
+------------------------------+-------------+
7 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Resumo

  • Use a HAVING COUNTcláusula para filtrar grupos pelo número de itens em cada grupo.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *