24
GROUP BY e HAVING: essas incompreendidas cláusulas SELECT
Filed Under (Banco de dados) by Antonio Passos on 24-04-2008
Tagged Under : Banco de dados, GROUP BY, HAVING, SELECT, SQL
A instrução SELECT possui duas cláusulas poderosas, pouco compreendidas e usadas: GROUP BY e HAVING.
A cláusula GROUP BY organiza dados em grupos, produzindo sumários. A cláusula HAVING estabelece condições para listar esses grupos. Dizemos que a cláusula HAVING está para a cláusula GROUP BY, assim como a cláusula WHERE está para o comando SELECT.
A sintaxe do comando SELECT com as cláusulas GROUP BY e HAVING é:
SELECT <coluna(s)>
FROM <tabela>
WHERE <condições>
GROUP BY <coluna(s)>
HAVING <condições>
Seguem aplicações dessas cláusulas baseadas na tabela abaixo:

1)Qual o total das vendas?
SELECT SUM(valor)
FROM vendas

2)Qual o total das vendas de cada vendedor?
SELECT vendedor, SUM(valor)
FROM vendas
GROUP BY vendedor
3)Quantas vendas foram feitas?
SELECT COUNT(*)
FROM vendas
4)Quantas vendas cada vendedor fez?
SELECT vendedor, COUNT(*)
FROM vendas
GROUP BY vendedor
5)Qual a menor e a maior venda?
SELECT MIN(valor), MAX(valor)
FROM vendas
6)Qual a menor e a maior venda de cada vendedor?
SELECT vendedor, MIN(valor), MAX(valor)
FROM vendas
GROUP BY vendedor
7)Qual a média das vendas dos dias 15 e 17?
SELECT data, AVG(valor)
FROM vendas
WHERE data IN ('2008-04-15', '2008-04-17')
GROUP BY data
8)Em quais dias as vendas superaram 3.000?
SELECT data, SUM(valor)
FROM vendas
GROUP BY data
HAVING SUM(valor) >3000
9)Em quais dias, no período de 14 a 16/04/2008, a média das vendas foi menor que 2000?
SELECT data, AVG(valor)
FROM vendas
WHERE data BETWEEN '2008-04-14' AND '2008-04-16'
GROUP BY data
HAVING AVG(valor) <2000
10)Que vendedores fecharam mais de 2 vendas nos dias 14, 16 e 18/04/2008?
SELECT vendedor, COUNT(*)
FROM vendas
WHERE data IN ('2008-04-14', '2008-04-16', '2008-04-18')
GROUP BY vendedor
HAVING COUNT(*) >2

É isso, pessoal! Os exemplos usaram apenas funções agregadas. Com stored procedures, o céu torna-se o limite para as queries.



Putz Antônio,
Muito bom o teu artigo. Excelente, claro e objetivo.
Um grande abraço,
Leandro da Toca do Tiger.
Obrigado, Leandro.
Abraços,
Antonio Passos
Muito bom Antônio. Obrigado e parabéns.
Perfeito.
Vou colocar em meu blog, com os devidos créditos é claro. Parabéns!
Muito bom seu post.
Realmente você está de parabéns!
[]‘
Selma
‘Brigadão’, Selma!
Muito fera cara!!!
Valeu pelos exemplos esclareceu tudo sobre o Having, valeu!
Ok, Juliano! Obrigado pelo comentário!
Antonio Passos
Tem o seguinte problema
Tenho 02 Tabelas
TB_01 (Nome_Prod)
TB_01 (Nome_Prod)
e preciso do seguinte resultado
Campo Nome_Prod = Total
Excelente artigo! Parabéns!
Nota 10 Antonio. Uma vez escutei a seguinte frase: “o difícil é fazer fácil”. É extremamente difícil encontrar alguém que explique de forma simples, clara e objetivo. E é muito fácil encontrar pessoas dando explicações prolixas e aumentando a complexidade das coisas mas do que elas já possuem.
Parabéns. Você está no primeiro grupo com toda a certeza!
Abraços,
Geraldo
MTo bom mesmo o artigo!
tava precisando entender mais sobre Group by e Having e, depois de ler ficou mto mais claro!!
ótimo artigo! parabéns.
se eu quiser saber o NOME e VALOR da ultima venda de todos os vendedores.. será que dá? como seria?