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:
| id | nombre | departamento | salario | fecha_contratacion |
|---|---|---|---|---|
| 1 | María García | Ventas | 45000 | 2021-03-15 |
| 2 | Carlos López | Ventas | 52000 | 2020-01-10 |
| 3 | Ana Martínez | Marketing | 48000 | 2021-06-22 |
| 4 | Pedro Sánchez | TI | 65000 | 2019-08-05 |
| 5 | Laura Rodríguez | Marketing | 47000 | 2022-02-14 |
| 6 | Miguel Fernández | TI | 62000 | 2020-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)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: 127000AVG: 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: 47500SELECT ROUND(AVG(salario), 2) AS salario_promedio
FROM empleados;
-- Resultado: 53166.67MIN 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 45000Una 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:
| departamento | num_empleados | total_salarios | promedio_salario | min_salario | max_salario |
|---|---|---|---|---|---|
| Ventas | 2 | 97000 | 48500 | 45000 | 52000 |
| Marketing | 2 | 95000 | 47500 | 47000 | 48000 |
| TI | 2 | 127000 | 63500 | 62000 | 65000 |
Errores Comunes y Cómo Evitarlos
- 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.
- Confundir COUNT(*) con
COUNT(columna): El primero cuenta todas las filas, el segundo solo las no nulas. - Ignorar valores NULL: SUM y AVG ignoran nulos, lo cual puede afectar tus cálculos si no lo consideras.
- Usar funciones de agregación en WHERE: No puedes usar COUNT() directamente en WHERE. Usa HAVING para filtrar después de la agregación.
-- 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.
¿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;
¿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
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.
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