SQL para Análisis: Domina COUNT, SUM y AVG para Resumir Datos Eficientemente
En el mundo de los datos, rara vez nos conformamos con ver registros individuales. Lo que a menudo buscamos es una visión de alto nivel: ¿cuántos clientes tenemos? ¿Cuál es el total de ventas del mes? ¿Cuál es el promedio de edad de nuestros usuarios? Aquí es donde las funciones de agregación de SQL se convierten en tus mejores aliadas.
Estas funciones están diseñadas para operar sobre un conjunto de filas y devolver un único valor de resumen. En este post, nos centraremos en tres de las más fundamentales y usadas: COUNT, SUM y AVG.
¿Qué Son las Funciones de Agregación?
Las funciones de agregación, también conocidas como funciones de grupo, toman múltiples valores de una columna (o un grupo de columnas) y los "agregan" para producir un único resultado. Son esenciales para el resumen de datos y para obtener métricas clave de tus bases de datos.
1. COUNT(): Contando tus Registros
La función COUNT() se utiliza para contar el número de filas en una tabla o el número de valores no nulos en una columna específica.
Sintaxis Básica:
COUNT(expresion)
Variantes y Ejemplos:
- Contar Todas las Filas (`COUNT(*)`):
Esto devuelve el número total de filas en una tabla, incluyendo aquellas con valores
NULL.SELECT COUNT(*) AS total_clientes FROM Clientes;Resultado: Un número que indica la cantidad total de clientes.
- Contar Valores No Nulos en una Columna (`COUNT(columna)`):
Esto cuenta el número de filas donde la
columnaespecificada no esNULL.SELECT COUNT(email) AS clientes_con_email FROM Clientes;Si la columna
emailpuede contenerNULL, este conteo será diferente aCOUNT(*)si hay clientes sin email. - Contar Valores Distintos (`COUNT(DISTINCT columna)`):
Esto cuenta el número de valores únicos y no nulos en una columna.
SELECT COUNT(DISTINCT ciudad) AS ciudades_unicas FROM Clientes;Si varios clientes viven en la misma ciudad, solo se contará una vez.
COUNT() es ideal para saber cuántos elementos hay de algo, validar que no faltan datos (comparando COUNT(*) con COUNT(columna)), o identificar la diversidad de categorías.
2. SUM(): Calculando Totales
La función SUM() se utiliza para calcular la suma total de los valores de una columna numérica.
Sintaxis Básica:
SUM(columna_numerica)
Ejemplos:
- Total de Ventas:
SELECT SUM(monto) AS total_ventas_global FROM Pedidos;Si la columna
montocontiene el valor de cada pedido, esto te dará el monto total de todos los pedidos. - Total de Stock Disponible:
SELECT SUM(cantidad_disponible) AS stock_total FROM Productos;Para conocer la cantidad total de unidades disponibles de todos tus productos.
Importante: SUM() solo funciona con columnas numéricas. Si intentas usarla con una columna de texto o fecha, obtendrás un error.
3. AVG(): Calculando Promedios
La función AVG() se utiliza para calcular el valor promedio de una columna numérica. Ignora los valores NULL.
Sintaxis Básica:
AVG(columna_numerica)
Ejemplos:
- Promedio de Precios de Productos:
SELECT AVG(precio) AS precio_promedio_productos FROM Productos;Esto te dará el precio medio de todos los productos en tu tabla.
- Edad Promedio de Empleados:
SELECT AVG(edad) AS edad_promedio_empleados FROM Empleados;Útil para análisis demográficos.
- Monto Promedio por Pedido:
SELECT AVG(monto) AS monto_promedio_pedido FROM Pedidos;
Al igual que SUM(), AVG() requiere una columna numérica.
Combinando Funciones de Agregación con GROUP BY
El verdadero poder de las funciones de agregación se revela cuando las combinamos con la cláusula GROUP BY. GROUP BY te permite dividir el conjunto de resultados en grupos de filas, y luego la función de agregación opera sobre cada uno de esos grupos de forma independiente.
Ejemplos con GROUP BY:
- Número de Clientes por Ciudad:
SELECT ciudad, COUNT(*) AS total_clientes FROM Clientes GROUP BY ciudad;Esto te mostrará cuántos clientes hay en cada ciudad única.
- Total de Ventas por Producto:
SELECT P.nombre_producto, SUM(DP.cantidad * PR.precio_unitario) AS ventas_totales_producto FROM Productos PR INNER JOIN DetallePedidos DP ON PR.id_producto = DP.id_producto GROUP BY P.nombre_producto;Aquí combinamos
INNER JOINconSUMyGROUP BYpara un análisis más profundo. - Promedio de Pedidos por Cliente:
SELECT C.nombre_cliente, COUNT(P.id_pedido) AS total_pedidos, AVG(P.monto) AS promedio_monto_pedido FROM Clientes C LEFT JOIN Pedidos P ON C.id_cliente = P.id_cliente GROUP BY C.nombre_cliente;Con
LEFT JOINaseguramos que aparezcan todos los clientes, incluso si no tienen pedidos (en cuyo casoCOUNTyAVGparaP.montoserían 0 o NULL).
Filtrando Grupos con HAVING
Así como usamos WHERE para filtrar filas individuales, usamos la cláusula HAVING para filtrar los resultados de los grupos creados por GROUP BY, basándonos en las funciones de agregación.
Ejemplo con HAVING:
- Ciudades con más de 100 Clientes:
SELECT ciudad, COUNT(*) AS total_clientes FROM Clientes GROUP BY ciudad HAVING COUNT(*) > 100;Esto solo mostrará las ciudades que tienen más de 100 clientes.
Es crucial recordar que WHERE filtra *antes* de agrupar y agregar, mientras que HAVING filtra *después* de agrupar y agregar.
Las funciones de agregación COUNT, SUM y AVG son herramientas fundamentales para cualquier profesional de datos que trabaje con SQL. Te permiten transformar un mar de registros individuales en resúmenes significativos, proporcionando insights valiosos para la toma de decisiones.
Al dominarlas y combinarlas con GROUP BY y HAVING, podrás realizar análisis de datos complejos de manera eficiente y extraer el máximo valor de tus bases de datos. ¡Empieza a agregarlos a tu repertorio de SQL hoy mismo!