Sentença GROUP BY SQL

As funções de agregação (por exemplo, SUM) geralmente requerem a adição da cláusula GROUP BY.

Cláusula GROUP BY

A cláusula GROUP BY é usada para combinar funções de agregação, agrupando o conjunto de resultados com base em uma ou mais colunas.

Sintaxe do SQL GROUP BY

SELECT column_name, função_agregada(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

Exemplo de SQL GROUP BY

Nós possuímos a seguinte tabela "Orders":

O_Id DataDoPedido PrecoDoPedido Cliente
1 29/12/2008 1000 Bush
2 23/11/2008 1600 Carter
3 05/10/2008 700 Bush
4 28/09/2008 300 Bush
5 06/08/2008 2000 Adams
6 21/07/2008 100 Carter

Agora, queremos encontrar o total de金额 (total de pedidos) de cada cliente.

Queremos usar a cláusula GROUP BY para agrupar os clientes.

Usamos a seguinte declaração SQL:

SELECT Cliente,SUM(PrecoDoPedido) FROM Pedidos
GROUP BY Cliente

O conjunto de resultados parece assim:

Cliente SUM(PrecoDoPedido)
Bush 2000
Carter 1700
Adams 2000

Muito bem, não é?

Vamos ver o que acontece se omitirmos o GROUP BY:

SELECT Cliente,SUM(PrecoDoPedido) FROM Pedidos

O conjunto de resultados parece assim:

Cliente SUM(PrecoDoPedido)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700

O conjunto de resultados acima não é o que precisamos.

Então, por que não podemos usar a seguinte declaração SELECT? Explicação: A declaração SELECT especifica duas colunas (Cliente e SUM(PrecoDoPedido)). "SUM(PrecoDoPedido)" retorna um único valor (o total da coluna "PrecoDoPedido"), enquanto "Cliente" retorna 6 valores (cada um correspondendo a uma linha na tabela "Pedidos"). Portanto, não obtemos o resultado correto. No entanto, como você já viu, a cláusula GROUP BY resolve esse problema.

GROUP BY uma ou mais colunas

Também podemos aplicar a cláusula GROUP BY a uma ou mais colunas, assim:

SELECT Cliente,DataDoPedido,SUM(PrecoDoPedido) FROM Pedidos
GROUP BY Cliente,DataDoPedido