CORE Code School

SQL básico: GROUP BY, ORDER BY, HAVING

10 minutos

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_ventafecha_ventaid_clienteproductocantidadprecio_unitario
12023-05-01101producto_A310
22023-05-02102producto_B220
32023-05-03103producto_C130
42023-05-04101producto_B520
52023-05-05102producto_A210
62023-05-06104producto_D140
72023-05-07101producto_C430
82023-05-08102producto_B320
92023-05-09103producto_A210
102023-05-10101producto_D140

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.

sql
SELECT <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.

sql
SELECT 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:

productocantidad_total
producto_A7
producto_B10
producto_C5
producto_D2

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.

sql
SELECT <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.

sql
SELECT 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_ventafecha_ventaid_clienteproductocantidadprecio_unitario
12023-05-01101producto_A310
22023-05-02102producto_B220
32023-05-03103producto_C130
42023-05-04101producto_B520
52023-05-05102producto_A210
62023-05-06104producto_D140
72023-05-07101producto_C430
82023-05-08102producto_B320
92023-05-09103producto_A210
102023-05-10101producto_D140

🕵️‍♀️ 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.

sql
SELECT <columna1>, <columna2>, ..., <funcion_agregacion>(<columnaN>)
FROM <tabla>
GROUP BY <columna1>, <columna2>, ..., <columnaN>
HAVING <condicion>;

Ejemplo:

sql
SELECT 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.

productocantidad_total
producto_A12
producto_B15
producto_C9

Podemos apreciar que solo se muestran los grupos de ventas que tienen una cantidad total vendida mayor que 10.

Bootcamp Python y Data Analytics