SQL – GROUP BY

As funções de agregação, em SQL, podem ser utilizadas com a instrução GROUP BY para agruparmos seus resultados.

O GROUP BY é utilizado em conjunto com as funções de agregação para agrupar seu ResultSet por uma ou mais colunas.

Sintaxe:


SELECT nome_coluna, funcao_de_agregacao(nome_coluna2)
FROM tabela
WHERE nome_coluna operador valor
GROUP BY nome_coluna

Exemplo:

Temos a seguinte tabela de ‘compra’:

id data preco cliente
1 2011/11/12 1000 Hallan
2 2011/10/23 1600 João
3 2011/09/02 700 Hallan
4 2011/09/03 300 Hallan
5 2011/08/30 2000 Pedro
6 2011/10/04 100 João

Agora, queremos a soma das compras (coluna preco) de cada cliente.

Devemos utilizar o GROUP BY para agrupar os clientes.

Utilizaremos, então, a seguinte instrução:


SELECT cliente, SUM(preco) FROM compra GROUP BY cliente;

O ResultSet, para a instrução acima, será:

cliente SUM(preco)
Hallan 2000
João 1700
Pedro 2000

Percebemos então que o GROUP BY deve ser utilizado sempre que queremos utilizar uma função de agregação para trazer um valor (no exemplo, a coluna preco) com alguma outra coluna onde não efetuamos nenhuma operação (no exemplo, a coluna cliente).

Um exemplo mais complexo

Veja a tabela ‘pessoa’:

id sobrenome nome endereco cidade
1 Silva Luis Rua Lauro Florianopolis
2 Souza Pedro Rua Schmidt Rio de Janeiro
3 Santos João Rua Nono São Paulo
4 Alves Silvano Rua Margarida Salvador
5 Souza Jack Rua das Araras Florianopolis

Temos também uma outra tabela, chamada ‘venda’:

id data id_pessoa
1 2011/11/12 3
2 2011/10/10 3
3 2011/09/08 1
4 2011/07/22 1
5 2011/08/30 5

Lembrando que a coluna id_pessoa da tabela venda é chave estrangeira para a a coluna id da tabela ‘pessoa’.

Temos também uma terceira tabela, chamada ‘venda_produtos’:

id produto valor id_venda
1 Agua 1000 1
2 Arroz 2000 1
3 Agua 1500 2
4 Fruta 3000 3
5 Feijão 500 5

A coluna id_venda é chave estrangeira para a a coluna id da tabela ‘venda’.

Desta forma, temos um relacionamento entre a tabela de venda_produto e a tabela de venda.

Queremos, agora, recuperar o nome e o sobrenome de cada pessoa e a soma (do valor) das vendas relacionadas a ela.

Devemos, então, utilizar a seguinte instrução:


SELECT pessoa.nome, pessoa.sobrenome, SUM(venda_produto.valor)
FROM pessoa
JOIN venda on venda.id_pessoa = pessoa.id
JOIN venda_produto on venda_produto.id_venda = venda.id
GROUP BY pessoa.nome, pessoa.sobrenome

O ResultSet da instrução acima será:

Nome Sobrenome SUM
João Santos 4500
Luis Silva 3000
Jack Souza 500

 

Neste exemplo, primeiramente, foi necessário efetuar uma junção (JOIN) entre as três tabelas relacionadas, pois os valores solicitados (nome, sobrenome e soma das vendas) se encontravam em tabelas diferentes.

Por ter utilizado uma função de agregação (SUM), foi necessário agrupar o restante das colunas, para obtermos a soma das vendas agrupadas por pessoa.

Referência: http://www.w3schools.com/sql/sql_groupby.asp

Deixe um Comentário


NOTA - Você pode usar estesHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>