Sentença GROUP BY SQL
- Página Anterior sum() do SQL
- Próxima Página HAVING do 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
- Página Anterior sum() do SQL
- Próxima Página HAVING do SQL