Sentencia GROUP BY en SQL
- Página anterior sum() de SQL
- Página siguiente HAVING de 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
- Página anterior sum() de SQL
- Página siguiente HAVING de SQL