1) A cláusula GROUP BY agrupa os dados retornando resultados acumulados por funções como SUM, COUNT, MAX, MIN e AVG. Isso permite obter valores totais agrupados, como a comissão total de um vendedor.
2) As funções de agrupamento incluem SUM para soma, COUNT para contagem, AVG para média, MAX para valor máximo e MIN para valor mínimo. LAST também é usado no MySQL.
3) A cláusula HAVING filtra os resultados do agrupamento, enquanto WHERE não pode considerar funções
3. 1. Cláusula GROUP BY - Agrupar
• Considere a situação da seguinte consulta:
• “obter a comissão total para o vendedor ID=1”
• Com as cláusulas já vistas: where, order by não temos como
obter a não ser uma lista das vendas aos clientes feitas pelo
vendedor e suas respectivas comissões
• Para acumular todas as vendas em um só valor para um
mesmo vendedor temos que usar a cláusula GROUP BY
• GROUP BY agrupa os dados retornando um resultado
acumulado por funções de grupamento:
sum, count, max, min, last, avg.
• Assim, para obtermos a comissão total do vendedor 1:
Select sum(a.vendas * b.comissao/100)
from cliente a, vendedor b
where a.vendedor=b.id and b.id=1
group by b.id;
4. 2. Funções de Agrupamento
• As funções de agrupamento: GROUP BY são
• SUM( ) – soma os valores específicos do grupamento
• COUNT( ) – conta quantos registros foram agrupados
• AVG( ) – calcula a média aritmética do agrupamento nos
valores especificados nos parâmetros entre “( )”
• MAX( ) – retorna o maior valor do grupamento
• MIN( ) – retorna o menor valor do grupamento
• LAST( ) – retorna o último valor do grupamento (MySQL)
• Algumas vezes devemos usar as funções MAX e MIN para
podermos obter um valor repetido de forma a aparecer
somente um vez no resultado da consulta
• Ex: Obter nome vendedor e comissões totais dos mesmos
Select MAX(b.nome), SUM(a.vendas * b.comissao/100)
from cliente a, vendedor b Group by b.id;
5. 4. Exemplos de Group By
• Obter total das vendas do cliente que mais compra
Select MAX(vendas) from cliente;
• Obter média de comissão dos vendedores
Select AVG(comissao) from vendedor;
• Listar nomes e média de comissões de vendas por
vendedores em ordem alfabética
Select MAX(b.nome) as Vendedor, AVG(a.vendas *
b.comissao) as Media from cliente a,vendedor b where
a.vendedor=b.id group by b.id order by 1;
6. 5. Condições em Agrupamentos
• Em uma consulta com GROUP BY podemos fazer uma
condicional para filtrar o resultado do grupamento. Para
essa finalidade devemos usar a cláusula HAVING ao
invés da já conhecida cláusula WHERE
• O HAVING pode considerar as funções de agrupamento
(MAX,MIN,SUM,AVG e COUNT) já a cláusula where não
pode fazer isso
• Exemplo: listar vendedores com comissões acima de 500
Select max(b.nome), sum(a.vendas * b.comissao/100)
Where a.vendedor=b.id Group By b.id
Having SUM(a.vendas * b.comissao/100)>500