¿Qué son las funciones de agregación en SQL?
Las funciones de agregación reciben los datos de varias filas y devuelven un resultado calculado. Son muy útiles cuando necesitás armar reportes sin traer todos los registros de la base de datos para procesarlos después en otro lenguaje.
Las cinco funciones que vas a usar con más frecuencia son:
| Función | Para qué sirve |
|---|---|
COUNT | Cuenta registros |
SUM | Suma valores numéricos |
AVG | Calcula un promedio |
MAX | Obtiene el valor más alto |
MIN | Obtiene el valor más bajo |
En este tutorial trabajamos con una tabla Ventas. Antes de escribir una consulta nueva, es una buena práctica mirar primero las columnas disponibles:
SELECT *
FROM Ventas;
COUNT: contar registros
COUNT(*) cuenta todas las filas que devuelve una consulta. Por ejemplo, para saber cuántas ventas hay registradas:
SELECT COUNT(*) AS CantidadVentas
FROM Ventas;
También podés combinarlo con WHERE para contar solo las filas que cumplen una condición. Esta es una de las formas más habituales de usar COUNT:
SELECT COUNT(*) AS VentasMayoresA100
FROM Ventas
WHERE PrecioUnitario > 100;
La consulta primero deja únicamente las ventas cuyo precio unitario supera 100 y después las cuenta.
Diferencia entre COUNT(*) y COUNT(columna)
Hay una diferencia importante entre contar todas las filas y contar una columna.
SELECT COUNT(*) AS TotalFilas
FROM Ventas;
COUNT(*) cuenta cada fila, incluso cuando alguna columna tenga NULL.
SELECT COUNT(Observaciones) AS VentasConObservacion
FROM Ventas;
COUNT(Observaciones) cuenta solo las filas cuya columna Observaciones tiene un valor. Los valores NULL no se incluyen en el conteo.
COUNT con GROUP BY: ventas por vendedor
GROUP BY permite calcular una agregación por cada grupo. Por ejemplo, para saber cuántas ventas realizó cada vendedor:
SELECT
NombreVendedor,
COUNT(*) AS CantidadVentas
FROM Ventas
GROUP BY NombreVendedor;
SQL junta las filas que tienen el mismo NombreVendedor y cuenta las ventas dentro de cada grupo. Si todavía no manejás bien este concepto, podés ver el tutorial de GROUP BY en SQL Server.
SUM: sumar valores de una columna
SUM sirve para obtener el total de una columna numérica. Por ejemplo, para sumar el importe total de las ventas:
SELECT SUM(Total) AS TotalVentas
FROM Ventas;
La columna que recibe SUM debe contener valores numéricos, como INT, DECIMAL o FLOAT. No tendría sentido sumar una columna de texto, como el nombre de un cliente.
Al igual que con COUNT, podés filtrar antes de sumar:
SELECT SUM(Total) AS TotalVentasMayoresA100
FROM Ventas
WHERE PrecioUnitario > 100;
Total vendido por cliente con SUM y GROUP BY
Una consulta muy común en reportes es obtener cuánto compró cada cliente:
SELECT
NombreCliente,
SUM(Total) AS TotalGastado
FROM Ventas
GROUP BY NombreCliente;
En lugar de devolver una fila por venta, devuelve una fila por cliente con su total acumulado. Ese es el valor de las agregaciones: resumir datos masivos directamente desde la base de datos.
AVG: calcular promedios
AVG calcula la media de una columna numérica. Si querés saber cuál es el subtotal promedio de las ventas:
SELECT AVG(Subtotal) AS PromedioSubtotal
FROM Ventas;
El promedio se obtiene sumando los valores y dividiéndolos entre la cantidad de valores considerados. También puede combinarse con filtros:
SELECT AVG(Subtotal) AS PromedioPrimerasVentas
FROM Ventas
WHERE IdVenta < 20;
Esto calcula el promedio únicamente con las ventas cuyo identificador sea menor a 20.
MIN y MAX: el menor y el mayor valor
MAX devuelve el valor más alto de una columna y MIN el más bajo.
SELECT
MAX(Total) AS VentaMasAlta,
MIN(Total) AS VentaMasBaja
FROM Ventas;
Estas funciones responden bien cuando necesitás el valor. Por ejemplo: el importe de la venta más alta o más baja.
Ver todos los datos de la venta más alta
Si lo que necesitás es inspeccionar todos los datos de la venta más grande, una alternativa simple es ordenar de mayor a menor y tomar el primer resultado:
SELECT TOP 1 *
FROM Ventas
ORDER BY Total DESC;
Para la venta más baja, cambiás el orden:
SELECT TOP 1 *
FROM Ventas
ORDER BY Total ASC;
Cuando quieras combinar el resultado de MAX o MIN con las demás columnas de esa fila, el siguiente paso es aprender subconsultas.
Resumen rápido
SELECT
COUNT(*) AS CantidadVentas,
SUM(Total) AS TotalVendido,
AVG(Subtotal) AS PromedioSubtotal,
MAX(Total) AS VentaMasAlta,
MIN(Total) AS VentaMasBaja
FROM Ventas;
Con estas funciones ya podés responder muchas preguntas de negocio: cuántas ventas hubo, cuánto se vendió, cuál es el promedio y cuáles fueron los extremos. Al combinarlas con WHERE, GROUP BY y luego subconsultas, podés construir reportes cada vez más completos.
Para continuar, repasá GROUP BY con ejemplos y HAVING en SQL Server.