Si estás aprendiendo SQL para análisis de datos, seguramente ya sabes hacer consultas básicas con SELECT, FROM o WHERE. Pero llega un punto en el que necesitas algo más que filtrar o mostrar información: necesitas transformarla, resumirla y encontrar patrones. Ahí es donde entran las funciones de SQL, que te permiten calcular totales, promedios, contar registros, comparar valores o incluso crear nuevas columnas con condiciones personalizadas.
En este artículo conocerás las 10 funciones más utilizadas de SQL para análisis de datos, explicadas con ejemplos prácticos y paso a paso.
No necesitas una base de datos compleja para practicar —usaremos un mini-dataset que te ayudará a entender cómo funcionan las funciones más importantes, desde COUNT() y SUM() hasta expresiones más potentes como ROW_NUMBER(). Dataset ejemplo:
| venta_id | fecha | cliente_id | producto | cantidad | precio_unitario | total | región | 1 | 2024-12-01 | 101 | A | 2 | 100 | 200 | Norte | 2 | 2025-01-15 | 102 | B | 1 | 250 | 250 | Sur | 3 | 2025-02-10 | 101 | A | 3 | 100 | 300 | Norte | 4 | 2025-03-05 | 103 | C | 5 | 80 | 400 | Este | 5 | 2025-03-20 | NULL | B | 2 | 250 | 500 | Sur | 6 | 2025-04-01 | 104 | A | 1 | 120 | 120 | Norte | 7 | 2024-11-30 | 105 | C | 2 | 80 | 160 | Oeste | 8 | 2025-02-15 | 102 | B | 4 | 250 | 1000 | Sur
1) COUNT() — contar filas y valores distintos
Descripción rápida: cuenta filas; puede contar todas las filas COUNT(*), o sólo las no nulas de una columna COUNT(col), o valores únicos COUNT(DISTINCT col).
NULLIF(SUM(cantidad), 0) evita división por cero si no hay ventas.
Tip: en bases donde la división de enteros trunca, CAST(... AS DECIMAL) es necesario para obtener decimales. En el ejemplo anterior puede ser buena idea castear si su SGBD hace división entera.
4) MIN() — mínimo
Descripción rápida: devuelve el menor valor de una columna (fechas, números, strings según contexto).
Qué obtienes: una tabla año/mes con totales, lista para series temporales o visualizaciones.
Tip: si tu SGBD soporta DATE_TRUNC('month', fecha) (ej. Postgres), esa función devuelve directamente la fecha truncada al primer día del mes y es cómoda para agrupar.
10) ROW_NUMBER() (función ventana) — particionar y ordenar dentro de grupos
Descripción rápida: asigna un número incremental dentro de particiones; fundamental para "top N por grupo", deduplicación por la fila más reciente, etc.
Ejemplo simple — obtener la última venta por cliente (deduplicación)
El GROUP BY region, producto calcula ventas por producto/región.
ROW_NUMBER() OVER (PARTITION BY region ORDER BY SUM(total) DESC) asigna ranking dentro de cada región.
Filtrando rn <= 3 obtenemos top 3 por región.
Tip: también existen RANK() y DENSE_RANK() si quieres manejar empates de forma distinta.
Buenas prácticas
NULLs: siempre piensa cómo quieres tratarlos. COUNT(col) y COALESCE suelen ser claves.
División / precisión: para porcentajes o promedios, CAST/CONVERT evitan truncamientos por división entera en algunos SGBD.
WHERE vs HAVING: WHERE filtra filas antes de agregación; HAVING filtra grupos después de GROUP BY.
Funciones en columnas indexadas: evita aplicar funciones (p. ej. CAST, LOWER, DATE()) en columnas usadas por índices en condiciones WHERE, porque puede impedir el uso del índice.
Window vs Aggregation: para top-N o cálculos que necesitan contexto (porcentaje sobre total, running total), las funciones ventana (ROW_NUMBER(), SUM() OVER(), ...) son más eficientes y expresivas.
Legibilidad: usa alias claros, comenta CASE complejos y divide consultas grandes en CTEs (WITH) para facilitar mantenimiento.
Performance: para datasets grandes, comprueba planes de ejecución y considera índices, particiones o pre-aggregaciones.
Resumen rápido
| Función | Uso típico | Tip práctico | COUNT() | Contar filas / valores únicos | COUNT(*) vs COUNT(col) vs COUNT(DISTINCT ...) | SUM() | Ingresos, cantidades | Usar con CASE para condicionales | AVG() | Promedio | Para promedio ponderado usar SUM(x*w)/SUM(w) | MIN() | Mínimos (fechas, montos) | Útil para cohortes | MAX() | Picos | Útil para top y outliers | CASE | Categorías | Reemplaza transformaciones ETL simples | COALESCE() | Reemplazo de NULL | Normaliza datos antes de agrupar | CAST() | Conversión de tipos | Evita errores de formato y truncamiento | EXTRACT() | Series temporales | Agrupar por año/mes/día | ROW_NUMBER() | Top-N / deduplicación | Potente con PARTITION BY
Como viste, las funciones de SQL son herramientas esenciales para transformar datos en información útil. Con solo unas cuantas líneas de código puedes contar, agrupar, calcular promedios, comparar valores o generar métricas personalizadas que te ayuden a responder preguntas de negocio o descubrir tendencias en tus datos.
Dominar estas funciones no solo te hará más eficiente en tus consultas, sino que también te acercará al siguiente nivel del análisis de datos: crear reportes, paneles e indicadores que realmente aporten valor. Recuerda practicar con tus propios datasets y combinar varias funciones en una misma consulta para seguir desarrollando tu pensamiento analítico en SQL.