Sentencia GROUP BY en SQL

Las funciones de agregación (como SUM) a menudo requieren la adición de una sentencia GROUP BY.

Sentencia GROUP BY

La sentencia GROUP BY se utiliza para combinar funciones de agregación, agrupando el conjunto de resultados según una o más columnas.

Sintaxis de SQL GROUP BY

SELECT column_name, función_agregada(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

Ejemplo de SQL GROUP BY

Tenemos la siguiente tabla "Orders":

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

Ahora, queremos encontrar la cantidad total de dinero (total de pedidos) de cada cliente.

Queremos usar la cláusula GROUP BY para agrupar por cliente.

Usamos la siguiente declaración SQL:

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

El conjunto de resultados se parece a esto:

Cliente SUM(PrecioPedido)
Bush 2000
Carter 1700
Adams 2000

¿Es increíble, ¿no es así?

Veamos qué sucede si omitimos GROUP BY:

SELECT Cliente,SUM(PrecioPedido) FROM Pedidos

El conjunto de resultados se parece a esto:

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

El conjunto de resultados no es el que necesitamos.

Entonces, ¿por qué no se puede usar la siguiente declaración SELECT? Explicación: La declaración SELECT especifica dos columnas (Cliente y SUM(PrecioPedido)). "SUM(PrecioPedido)" devuelve un valor único (el total de la columna "PrecioPedido"), mientras que "Cliente" devuelve 6 valores (cada uno correspondiente a cada fila en la tabla "Pedidos"). Por lo tanto, no obtenemos el resultado correcto. Sin embargo, como ya ha visto, la cláusula GROUP BY resuelve este problema.

GROUP BY una columna o más

También podemos aplicar la cláusula GROUP BY a una columna o más, como así:

SELECT Cliente,FechaPedido,SUM(PrecioPedido) FROM Pedidos
GROUP BY Cliente,FechaPedido