Cuando trabajamos con grandes conjuntos de datos en SQL, frecuentemente necesitamos resumir y organizar la información en tablas más manejables. Es aquí donde entran en juego las cláusulas GROUP BY, ORDER BY y HAVING.
La cláusula GROUP BY nos permite agrupar filas en una tabla según los valores en una o más columnas. La cláusula ORDER BY permite ordenar las filas de una tabla según los valores en una o más columnas. Y la cláusula HAVING filtrar grupos de filas según el resultado de una función de agregación.
Usaremos una tabla de ventas que contiene información sobre los pedidos realizados por los clientes en una tienda en línea. La tabla se llama ventas y se ve:
id_venta | fecha_venta | id_cliente | producto | cantidad | precio_unitario |
---|---|---|---|---|---|
1 | 2023-05-01 | 101 | producto_A | 3 | 10 |
2 | 2023-05-02 | 102 | producto_B | 2 | 20 |
3 | 2023-05-03 | 103 | producto_C | 1 | 30 |
4 | 2023-05-04 | 101 | producto_B | 5 | 20 |
5 | 2023-05-05 | 102 | producto_A | 2 | 10 |
6 | 2023-05-06 | 104 | producto_D | 1 | 40 |
7 | 2023-05-07 | 101 | producto_C | 4 | 30 |
8 | 2023-05-08 | 102 | producto_B | 3 | 20 |
9 | 2023-05-09 | 103 | producto_A | 2 | 10 |
10 | 2023-05-10 | 101 | producto_D | 1 | 40 |
En esta tabla, cada fila representa una venta individual con su id, fecha de venta, id de cliente, producto vendido, cantidad vendida y precio unitario.
🧑🤝🧑 GROUP BY
La cláusula GROUP BY se utiliza para agrupar filas según los valores en una o más columnas. Se usa junto con funciones de agregación como SUM, COUNT o AVG para resumir los datos en cada grupo.
sqlSELECT <columna1>, <columna2>, ..., <funcion_agregacion>(<columnaN>) FROM <tabla> GROUP BY <columna1>, <columna2>, ..., <columnaN>;
Donde columna1, columna2, ..., columnaN son las columnas que se utilizan para agrupar las filas y funcion_agregacion es una función de agregación como SUM, COUNT o AVG.
Hagamos un ejemplo real con la tabla anterior.
sqlSELECT producto, SUM(cantidad) as cantidad_total FROM ventas GROUP BY producto;
Con esto tendremos una respuesta con la cantidad total de cada producto vendido en todas las ventas. Este es el resultado:
producto | cantidad_total |
---|---|
producto_A | 7 |
producto_B | 10 |
producto_C | 5 |
producto_D | 2 |
Podemos ver que la cláusula GROUP BY agrupó todas las filas que tenían el mismo producto y luego sumó la cantidad vendida para cada producto.
🔢 ORDER BY
La cláusula ORDER BY se utiliza para ordenar las filas de una tabla según los valores en una o más columnas. Podemos ordenar en orden ascendente o descendente utilizando las palabras clave ASC o DESC.
sqlSELECT <columna1>, <columna2>, ... FROM <tabla> ORDER BY <columna1> [ASC|DESC], <columna2> [ASC|DESC], ...;
Aqui columna1, columna2, ... son las columnas que se utilizan para ordenar las filas y [ASC|DESC] es opcional y especifica el orden en que se deben ordenar las filas.
sqlSELECT id_venta, fecha_venta, id_cliente, producto, cantidad, precio_unitario FROM ventas ORDER BY fecha_venta ASC;
Ordenamos todas las ventas por fecha de venta en orden ascendente.
id_venta | fecha_venta | id_cliente | producto | cantidad | precio_unitario |
---|---|---|---|---|---|
1 | 2023-05-01 | 101 | producto_A | 3 | 10 |
2 | 2023-05-02 | 102 | producto_B | 2 | 20 |
3 | 2023-05-03 | 103 | producto_C | 1 | 30 |
4 | 2023-05-04 | 101 | producto_B | 5 | 20 |
5 | 2023-05-05 | 102 | producto_A | 2 | 10 |
6 | 2023-05-06 | 104 | producto_D | 1 | 40 |
7 | 2023-05-07 | 101 | producto_C | 4 | 30 |
8 | 2023-05-08 | 102 | producto_B | 3 | 20 |
9 | 2023-05-09 | 103 | producto_A | 2 | 10 |
10 | 2023-05-10 | 101 | producto_D | 1 | 40 |
🕵️♀️ HAVING
La cláusula HAVING se utiliza para filtrar grupos de filas según el resultado de una función de agregación. Permite filtrar grupos basados en una condición.
sqlSELECT <columna1>, <columna2>, ..., <funcion_agregacion>(<columnaN>) FROM <tabla> GROUP BY <columna1>, <columna2>, ..., <columnaN> HAVING <condicion>;
Ejemplo:
sqlSELECT producto, SUM(cantidad) as cantidad_total FROM ventas GROUP BY producto HAVING SUM(cantidad) > 10;
Agrupamos todas las ventas por producto y luego filtramos los grupos que tengan una cantidad total vendida mayor que 10.
producto | cantidad_total |
---|---|
producto_A | 12 |
producto_B | 15 |
producto_C | 9 |
Podemos apreciar que solo se muestran los grupos de ventas que tienen una cantidad total vendida mayor que 10.
Bootcamp Python y Data Analytics
Bootcamp Python y Data Analytics