Funciones de agregación: COUNT, SUM, AVG, MIN, MAX

Lectura
20 min~7 min lectura
CONCEPTO CLAVE: Las funciones de agregación son herramientas poderosas de SQL que permiten realizar cálculos sobre un conjunto de filas y devolver un único valor resumido. Dominarlas es esencial para cualquier análisis de datos efectivo.

Funciones de Agregación en SQL

Las funciones de agregación son operadores especiales que procesan múltiples filas de datos y devuelven un único resultado. Imagina que tienes una mesa con miles de registros de ventas: en lugar de contar manualmente cada venta, las funciones de agregación lo hacen por ti en milisegundos. Estas funciones son el corazón del análisis de datos en SQL y aparecen constantemente en informes, dashboards y reportes empresariales.

En esta lección aprenderás a utilizar las cinco funciones de agregación fundamentales: COUNT, SUM, AVG, MIN y MAX. Cada una tiene un propósito específico y dominarlas te permitirá transformar datos brutos en información valiosa.

La Tabla de Ejemplo

Para todos los ejemplos de esta lección, utilizaremos una tabla llamada empleados que representa los datos de una empresa tecnológica:

idnombredepartamentosalariofecha_contratacion
1María GarcíaVentas450002021-03-15
2Carlos LópezVentas520002020-01-10
3Ana MartínezMarketing480002021-06-22
4Pedro SánchezTI650002019-08-05
5Laura RodríguezMarketing470002022-02-14
6Miguel FernándezTI620002020-11-30

COUNT: Contando Filas

La función COUNT() es probablemente la más utilizada en SQL. Como su nombre indica, cuenta el número de filas que cumplen una condición específica. Esta función es increíblemente versátil porque puede contar todas las filas, solo las que tienen valores no nulos, o las que son distintas entre sí.

Sintaxis Básica

SELECT COUNT(*) FROM tabla;
SELECT COUNT(columna) FROM tabla;

Ejemplos Prácticos

-- Contar todos los empleados
SELECT COUNT(*) AS total_empleados
FROM empleados;

-- Resultado: 6
-- Contar empleados en el departamento de Ventas
SELECT COUNT(*) AS empleados_ventas
FROM empleados
WHERE departamento = 'Ventas';

-- Resultado: 2
-- Contar valores no nulos en una columna
SELECT COUNT(salario) AS empleados_con_salario
FROM empleados;

-- Resultado: 6 (todos tienen salario)
💡 Tip importante: COUNT(*) cuenta todas las filas incluyendo duplicados y nulos, mientras que COUNT(columna) solo cuenta filas donde esa columna específica no es NULL.
📌 Dato curioso: COUNT(*) es generalmente más rápido que COUNT(columna) porque el optimizador de consultas puede aprovechar índices sin necesidad de verificar valores específicos.

SUM: Sumando Valores

La función SUM() calcula la suma total de una columna numérica. Es fundamental para operaciones financieras como calcular totales de ventas, presupuestos o cualquier acumulación de valores numéricos. Sin embargo, ten en cuenta que SUM ignora automáticamente los valores NULL, tratándolos como si no existieran.

Sintaxis Básica

SELECT SUM(columna) FROM tabla;
SELECT SUM(columna) AS alias FROM tabla WHERE condicion;

Ejemplos Prácticos

-- Calcular la masa salarial total
SELECT SUM(salario) AS masa_salarial
FROM empleados;

-- Resultado: 319000
-- Sumar salarios solo del departamento de TI
SELECT SUM(salario) AS presupuesto_ti
FROM empleados
WHERE departamento = 'TI';

-- Resultado: 127000
⚠️ Advertencia: SUM solo funciona con columnas numéricas (INTEGER, FLOAT, DECIMAL). Si intentas usarla con texto o fechas, recibirás un error. Además, ten cuidado con valores muy grandes: el resultado puede desbordar los límites del tipo de dato.

AVG: Calculando Promedios

La función AVG() calcula el promedio aritmético de una columna numérica. Es esencial para análisis estadísticos, comparativas de rendimiento y métricas de negocio. Al igual que SUM, AVG ignora los valores NULL durante el cálculo, lo cual es importante considerar en tus análisis.

Sintaxis Básica

SELECT AVG(columna) FROM tabla;
SELECT AVG(columna) AS alias FROM tabla;

Ejemplos Prácticos

-- Calcular el salario promedio de la empresa
SELECT AVG(salario) AS salario_promedio
FROM empleados;

-- Resultado: 53166.67 (aproximado)
-- Promedio de salarios por departamento de Marketing
SELECT AVG(salario) AS promedio_marketing
FROM empleados
WHERE departamento = 'Marketing';

-- Resultado: 47500
💡 Consejo profesional: Para un mejor formato en los resultados, puedes usar ROUND() junto con AVG() para controlar los decimales:
SELECT ROUND(AVG(salario), 2) AS salario_promedio
FROM empleados;

-- Resultado: 53166.67

MIN y MAX: Extremos de los Datos

Las funciones MIN() y MAX() encuentran respectivamente el valor mínimo y máximo en una columna. Son extremadamente útiles para identificar outliers, establecer rangos de datos, encontrar fechas最早 o más recientes, y para validaciones de datos. Estas funciones funcionan con números, texto y fechas.

Sintaxis Básica

SELECT MIN(columna), MAX(columna) FROM tabla;

Ejemplos Prácticos

-- Encontrar los salarios extremos
SELECT MIN(salario) AS salario_minimo,
       MAX(salario) AS salario_maximo
FROM empleados;

-- Resultado: MIN = 45000, MAX = 65000
-- Encontrar fechas de contratación
SELECT MIN(fecha_contratacion) AS primer_contratado,
       MAX(fecha_contratacion) AS_ultimo_contratado
FROM empleados;

-- Resultado: 最早 = 2019-08-05, Más reciente = 2022-02-14
-- Nombre del empleado con menor salario
SELECT nombre, salario
FROM empleados
WHERE salario = (SELECT MIN(salario) FROM empleados);

-- Resultado: María García con 45000
📌 Aplicación práctica: MIN y MAX con fechas son muy útiles para calcular antigüedad de empleados, identificar clientes inactivos o encontrar productos sin vender desde hace tiempo.
Ver más: Combinando funciones de agregación

Una de las mayores fortalezas de SQL es que puedes combinar múltiples funciones de agregación en una sola consulta. Esto te permite obtener un panorama completo de tus datos en una sola ejecución:

SELECT 
    COUNT(*) AS total_empleados,
    SUM(salario) AS masa_salarial,
    AVG(salario) AS salario_promedio,
    MIN(salario) AS salario_minimo,
    MAX(salario) AS salario_maximo
FROM empleados;

Este tipo de consulta es ideal para generar reportes ejecutivos con métricas clave de un vistazo.

Combinando con GROUP BY

Las funciones de agregación se vuelven verdaderamente poderosas cuando las combinas con la cláusula GROUP BY. Esta combinación te permite realizar cálculos agrupados por categorías, algo fundamental para el análisis de datos empresarial.

-- Estadísticas por departamento
SELECT 
    departamento,
    COUNT(*) AS num_empleados,
    SUM(salario) AS total_salarios,
    AVG(salario) AS promedio_salario,
    MIN(salario) AS min_salario,
    MAX(salario) AS max_salario
FROM empleados
GROUP BY departamento;

El resultado sería:

departamentonum_empleadostotal_salariospromedio_salariomin_salariomax_salario
Ventas297000485004500052000
Marketing295000475004700048000
TI2127000635006200065000
💡 Recuerda: Cuando usas GROUP BY, todas las columnas que no tienen función de agregación deben aparecer en la cláusula GROUP BY. Esto es una regla fundamental de SQL.

Errores Comunes y Cómo Evitarlos

  1. Olvidar GROUP BY: Si seleccionas columnas sin agregación sin incluir GROUP BY, recibirás un error en la mayoría de bases de datos SQL estrictas.
  2. Confundir COUNT(*) con COUNT(columna): El primero cuenta todas las filas, el segundo solo las no nulas.
  3. Ignorar valores NULL: SUM y AVG ignoran nulos, lo cual puede afectar tus cálculos si no lo consideras.
  4. Usar funciones de agregación en WHERE: No puedes usar COUNT() directamente en WHERE. Usa HAVING para filtrar después de la agregación.
⚠️ Error típico: Intentar hacer algo como esto generará un error:
-- INCORRECTO
SELECT nombre, COUNT(*) 
FROM empleados
WHERE COUNT(*) > 1;

-- CORRECTO: Usar HAVING después de GROUP BY
SELECT departamento, COUNT(*) AS num
FROM empleados
GROUP BY departamento
HAVING COUNT(*) > 1;

Caso de Uso Real: Dashboard de Recursos Humanos

Imagina que necesitas crear un reporte para el directorio de recursos humanos. Aquí está cómo utilizarías todas las funciones de agregación juntas:

-- Reporte ejecutivo de empleados
SELECT 
    departamento,
    COUNT(*) AS total_empleados,
    ROUND(AVG(salario), 2) AS salario_promedio,
    SUM(salario) AS costo_total,
    MIN(fecha_contratacion) AS antiguedad_promedio,
    MAX(salario) AS maximo_salarial
FROM empleados
GROUP BY departamento
ORDER BY suma_salarios DESC;

Este tipo de consulta resume perfectamente el poder de las funciones de agregación: en una sola ejecución, obtienes información que manualmente requeriría horas de trabajo.

🧠 Quiz: Funciones de Agregación

¿Cuál de las siguientes consultas cuenta correctamente el número de empleados con salario mayor a 50000?

  • A) SELECT COUNT(*) FROM empleados WHERE salario > 50000;
  • B) SELECT SUM(*) FROM empleados WHERE salario > 50000;
  • C) SELECT AVG(*) FROM empleados WHERE salario > 50000;
  • D) SELECT MIN(*) FROM empleados WHERE salario > 50000;
✅ Respuesta correcta: A) COUNT(*) es la función correcta para contar filas. SUM, AVG, MIN y MAX requieren una columna como argumento y no son apropiadas para contar.
🧠 Quiz: Diferencia entre funciones

¿Qué diferencia hay entre COUNT(*) y COUNT(nombre_columna)?

  • A) No hay diferencia, ambas cuentan igual
  • B) COUNT(*) cuenta todas las filas, COUNT(columna) ignora los valores NULL
  • C) COUNT(columna) es más rápida que COUNT(*)
  • D) COUNT(*) solo funciona con tablas pequeñas
✅ Respuesta correcta: B) COUNT(*) cuenta todas las filas de la tabla sin importar si tienen valores NULL, mientras que COUNT(columna) solo cuenta las filas donde esa columna específica tiene un valor no nulo.

Resumen y Próximos Pasos

Has aprendido las cinco funciones de agregación fundamentales de SQL:

  • COUNT: Cuenta el número de filas
  • SUM: Suma valores numéricos
  • AVG: Calcula promedios
  • MIN: Encuentra el valor mínimo
  • MAX: Encuentra el valor máximo

Estas funciones son la base para análisis más avanzados. En la siguiente lección, aprenderás a combinarlas con GROUP BY y HAVING para crear reportes más sofisticados y filtrar resultados agregados.

📌 Recuerda: La práctica es esencial para dominar estas funciones. Te recomiendo experimentar con las consultas en tu base de datos, modificando las condiciones WHERE y observando cómo cambian los resultados.
El dominio de las funciones de agregación marca la diferencia entre alguien que solo recupera datos y alguien que realmente analiza y comprende la información. — Anónimo profesional de datos
💡 Próxima lección: Aprenderás a usar HAVING para filtrar resultados después de la agregación, lo que te permitirá crear consultas aún más poderosas y específicas.