GROUP BY en SQL Server explicado con ventas
En este video seguimos con el curso de SQL y entramos en GROUP BY, una de las partes más importantes cuando querés pasar de ver filas individuales a obtener resúmenes.
La idea del ejercicio es simple: crear una tabla de ventas, cargar datos de ejemplo y responder preguntas como:
- Cuántas ventas tiene cada cliente.
- Cuántas unidades se vendieron por categoría.
- Cómo usar
COUNTySUMjunto conGROUP BY.
No buscamos memorizar todo de golpe. La idea es que puedas ver el resultado, romperlo en pasos y entender qué está pasando.
Antes de agrupar: crear datos de ejemplo
Para practicar GROUP BY necesitás datos. Por eso en el video primero vamos a SQL Server Management Studio, creamos una nueva query, nos aseguramos de tener seleccionada la base de datos correcta y creamos una tabla Ventas.
CREATE TABLE Ventas (
Id INT PRIMARY KEY,
Cliente VARCHAR(50),
Categoria VARCHAR(50),
Producto VARCHAR(50),
Cantidad INT,
PrecioUnitario DECIMAL(10, 2)
);
Después insertamos datos para tener algo que agrupar:
INSERT INTO Ventas (Id, Cliente, Categoria, Producto, Cantidad, PrecioUnitario) VALUES
(1, 'Ana', 'Cursos', 'SQL básico', 1, 1200.00),
(2, 'Bruno', 'Cursos', 'Java básico', 1, 1500.00),
(3, 'Ana', 'Libros', 'Apunte SQL', 2, 300.00),
(4, 'Carla', 'Cursos', 'SQL básico', 1, 1200.00),
(5, 'Bruno', 'Libros', 'Apunte Java', 3, 250.00),
(6, 'Ana', 'Cursos', 'SQL avanzado', 1, 1800.00);
Podés revisar la tabla con:
SELECT *
FROM Ventas;
En SSMS suelo seleccionar solo la consulta que quiero ejecutar y usar Alt + X para correrla más rápido.
Qué hace GROUP BY
GROUP BY te pide algo muy concreto: en base a qué columna querés agrupar.
En el ejemplo del video usamos Cliente. Entonces SQL toma las filas y las separa como si armara mesas:
- Una mesa para Ana.
- Una mesa para Bruno.
- Una mesa para Carla.
Cada venta va a la mesa del cliente correspondiente. Después SQL “condensa” cada grupo en una sola fila de resultado.
Por eso no alcanza con hacer esto:
SELECT *
FROM Ventas
GROUP BY Cliente;
El problema es que * intenta mostrar todas las columnas, pero dentro del grupo puede haber distintos productos, cantidades o precios. SQL no sabe cuál de esos valores individuales debería mostrar.
La solución es elegir:
- La columna por la que agrupás.
- Una función agregada para resumir el resto.
Ejemplo 1: contar ventas por cliente
Si queremos saber cuántas ventas tiene cada cliente, usamos COUNT.
SELECT
Cliente,
COUNT(*) AS TotalVentas
FROM Ventas
GROUP BY Cliente;
La lectura es:
FROM Ventas: tomo la tabla de ventas.GROUP BY Cliente: agrupo por cliente.COUNT(*): cuento cuántas filas tiene cada grupo.AS TotalVentas: le doy un nombre claro a la columna calculada.
Este es el primer resultado importante del video: dejamos de ver cada venta por separado y pasamos a ver un resumen por cliente.
Ejemplo 2: sumar unidades por categoría
La misma lógica sirve para sumar. Ahora no nos importa contar ventas por cliente, sino saber cuántas unidades se vendieron por categoría.
SELECT
Categoria,
SUM(Cantidad) AS CantidadVentas
FROM Ventas
GROUP BY Categoria;
Acá cambia la pregunta:
- Antes agrupábamos por
Cliente. - Ahora agrupamos por
Categoria. - Antes usábamos
COUNT. - Ahora usamos
SUM(Cantidad).
La estructura sigue siendo la misma.
La regla práctica
En el video lo explico como una forma de “aplastar” o condensar varias filas en una sola línea por grupo. Esa imagen mental ayuda bastante al principio.
Si agrupás por cliente, el resultado final tiene una fila por cliente. Si agrupás por categoría, el resultado final tiene una fila por categoría.
Otras funciones que podés usar
Una vez que entendés la lógica, podés cambiar la función según lo que necesites:
| Función | Para qué sirve |
|---|---|
COUNT(*) | Contar filas por grupo |
SUM(Cantidad) | Sumar cantidades |
MIN(PrecioUnitario) | Ver el valor mínimo |
MAX(PrecioUnitario) | Ver el valor máximo |
AVG(PrecioUnitario) | Calcular el promedio |
Para ejemplos más completos, con más casos y errores comunes, usá esta guía:
Ver recurso completo de GROUP BY en SQL
Resumen del video
En este capítulo del curso SQL vimos:
- Cómo crear una tabla
Ventas. - Cómo insertar datos de ejemplo.
- Por qué necesitamos datos para poder agrupar.
- Cómo contar ventas por cliente con
COUNT(*). - Cómo sumar cantidades por categoría con
SUM(Cantidad). - Por qué no conviene usar
SELECT *cuando trabajamos conGROUP BY.
Si este contenido te aporta valor, en el video también te invito a suscribirte, dejar like y comentar qué función o tema te gustaría ver en los próximos capítulos del curso SQL.