Aprende SQL · lección gratuita
Las funciones de agregación colapsan muchas filas en un solo valor resumen: cuentan, suman, promedian o buscan el extremo de una columna. Son la base de toda la analítica en SQL: ingresos totales, número de clientes, salario promedio, precio máximo. Cuando una consulta no tiene GROUP BY, una función de agregación reduce toda la tabla (tras el filtrado del WHERE) a una única fila.
COUNT()*: cuenta filas, incluidas las que tienen NULL. Es la forma canónica de "¿cuántos registros hay?".COUNT(columna): cuenta solo los valores no NULL de esa columna; útil para medir cobertura de un dato.COUNT(DISTINCT columna): cuenta valores distintos no NULL (cuántos clientes únicos, cuántos países diferentes).SUM(expr) y AVG(expr): suman y promedian valores numéricos; ignoran NULLs. expr puede ser un cálculo, p. ej. SUM(cantidadprecio_unitario(1-descuento)).MIN(expr) / MAX(expr): valor mínimo y máximo; funcionan con números, texto (orden alfabético) y fechas en formato 'YYYY-MM-DD'.Una función de agregación recibe una expresión y devuelve un escalar. Sin GROUP BY, el SELECT solo puede contener agregados (no columnas "sueltas"), porque no habría un único valor que mostrar junto al resumen.
NULLs y agregados: todos los agregados salvo COUNT(*) ignoran NULLs. Esto importa con promedios: AVG(col) divide la suma entre la cantidad de valores no NULL, no entre el total de filas. En la semilla no hay NULLs, pero aparecerán al usar LEFT JOIN (Módulo 3).
Floats: revenue = cantidad precio_unitario (1 - descuento). Como descuento es REAL, el resultado es de punto flotante y puede arrastrar decimales largos. Envuelve siempre los totales con ROUND(expr, 2) para presentación y comparaciones estables.
SELECT COUNT(*) AS total, ROUND(AVG(salario),0) AS promedio, MAX(salario) AS maximo, MIN(salario) AS minimo FROM empleados
-- Panorama global del negocio en una sola fila:
-- número de pedidos, clientes únicos, vendedores activos y canales distintos.
SELECT
COUNT(*) AS total_pedidos,
COUNT(DISTINCT cliente_id) AS clientes_unicos,
COUNT(DISTINCT empleado_id) AS vendedores,
COUNT(DISTINCT canal) AS canales
FROM pedidos;
-- Revenue total de toda la empresa (suma de líneas), redondeado a 2 decimales.
SELECT ROUND(SUM(cantidad * precio_unitario * (1 - descuento)), 2) AS revenue_total
FROM detalle_pedidos;
-- Estadísticas salariales de la plantilla completa.
SELECT
COUNT(*) AS empleados,
ROUND(AVG(salario), 2) AS salario_promedio,
MIN(salario) AS salario_minimo,
MAX(salario) AS salario_maximo,
SUM(salario) AS nomina_total
FROM empleados;
-- MIN/MAX también sirven con fechas (TEXT 'YYYY-MM-DD'): primer y último pedido.
SELECT MIN(fecha) AS primer_pedido, MAX(fecha) AS ultimo_pedido
FROM pedidos;
💡COUNT(*)yCOUNT(columna)NO son lo mismo: el primero cuenta filas, el segundo ignora NULLs. Y si quieres "cuántos valores diferentes hay", necesitasCOUNT(DISTINCT columna)— un error clásico es escribirCOUNT(canal)esperando 3 y obtener 40.
| Función | Qué hace |
|---|---|
COUNT(*) | Cuenta todas las filas (incluye NULLs) |
COUNT(col) | Cuenta valores no NULL de col |
COUNT(DISTINCT col) | Cuenta valores distintos no NULL |
SUM(expr) | Suma valores (ignora NULLs) |
AVG(expr) | Promedio (ignora NULLs) |
MIN(expr) / MAX(expr) | Mínimo / máximo (números, texto, fechas) |
ROUND(expr, n) | Redondea a n decimales (clave con REALes) |
---
← Conversión de tipos: CAST, COALESCE y NULLIFAgrupar datos: GROUP BY →