Hasta ahora, ya conoces las funciones de agregación básicas como COUNT, SUM, AVG, MAX y MIN.
Pero SQL ofrece muchas más opciones que permiten crear reportes poderosos y análisis avanzados.
En este artículo aprenderás:
- Qué son las funciones de agregación avanzadas.
- Ejemplos prácticos con datos de empleados y departamentos.
- Diferencias entre motores como SQL Server, PostgreSQL y MySQL.
- Buenas prácticas de uso y rendimiento.
Todos los ejemplos puedes ejecutarlos en db-fiddle.com.
¿Qué son las funciones de agregación avanzadas?
Las funciones de agregación permiten resumir o combinar información a partir de varias filas.
Las más básicas (COUNT, SUM, AVG, MAX, MIN) son universales, pero hay más funciones que varían según el motor:
STRING_AGG()→ concatenar valores de varias filas en una sola cadena (SQL Server, PostgreSQL).GROUP_CONCAT()→ similar, en MySQL y SQLite.VAR(),STDDEV()→ calcular varianza y desviación estándar (PostgreSQL, MySQL).PERCENTILE_CONT()yPERCENTILE_DISC()→ percentiles (SQL Server, PostgreSQL).
Datos de referencia
Seguiremos usando la tabla empleados:
| id_empleado | nombre | puesto | salario | fecha_contratacion | id_departamento |
|---|---|---|---|---|---|
| 1 | Ana Torres | Gerente de Ventas | 90000 | 2019-01-15 | 1 |
| 2 | Luis Pérez | Ejecutivo de Ventas | 65000 | 2020-03-10 | 1 |
| 3 | Carlos López | Analista Financiero | 60000 | 2021-06-25 | 3 |
| 4 | Marta Díaz | Especialista Marketing | 72000 | 2018-09-05 | 2 |
| 5 | Pedro García | Desarrollador Backend | 80000 | 2022-01-18 | 4 |
| 6 | Sofía Ruiz | Desarrollador Frontend | 80000 | 2022-02-10 | 4 |
Ejemplo 1: Concatenar nombres de empleados por departamento
-- PostgreSQL / SQL Server
SELECT id_departamento,
STRING_AGG(nombre, ', ') AS empleados
FROM empleados
GROUP BY id_departamento;
-- MySQL / SQLite
SELECT id_departamento,
GROUP_CONCAT(nombre SEPARATOR ', ') AS empleados
FROM empleados
GROUP BY id_departamento; Ejemplo 2: Calcular desviación estándar de salarios
-- PostgreSQL / MySQL
SELECT id_departamento,
STDDEV(salario) AS desviacion_salarial
FROM empleados
GROUP BY id_departamento; Ejemplo 3: Percentiles de salario
-- SQL Server y PostgreSQL
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salario) AS mediana
FROM empleados; Buenas prácticas
- Conoce el soporte de tu motor SQL: no todas las funciones avanzadas están disponibles en todos.
- Cuida el rendimiento:
STRING_AGGyGROUP_CONCATpueden volverse pesados en tablas grandes. - Documenta el uso de estadísticas: si usas percentiles, define claramente cuál (ej. P50, P90).
- Usa alias descriptivos: mejora la legibilidad de tus consultas.
Diferencias entre motores
| Motor SQL | Soporte de funciones |
|---|---|
| SQL Server | STRING_AGG, PERCENTILE_CONT, VAR, STDEV |
| PostgreSQL | Muy completo, soporta la mayoría de estadísticas |
| MySQL | GROUP_CONCAT, STDDEV, VAR_POP |
| SQLite | GROUP_CONCAT, menos funciones estadísticas |
Conclusión
Las funciones de agregación avanzadas te permiten ir más allá de los simples promedios y sumas.
Son clave para crear reportes inteligentes y análisis estadísticos dentro de SQL.
👉 Practica estos ejemplos en db-fiddle.com y empieza a usarlos en tus propios proyectos.