QuieroProgramar por Rodri Gonzalez
SQL · Lección 05 de 15

Funciones de agregación

Las funciones de agregación resumen muchas filas en un solo valor: cuántos clientes hay, cuál es el saldo total, el score promedio. Son las herramientas que convierten datos crudos en información útil para decisiones de negocio.

80–100 min Prerrequisitos: SQL 04
01

Concepto teórico

Las 5 funciones esenciales

Función Qué hace Ignora NULL? Ejemplo
COUNT(*) Cuenta TODAS las filas No (cuenta todo) COUNT(*) → 5
COUNT(col) Cuenta filas donde col NO es NULL COUNT(email) → 3
SUM(col) Suma valores SUM(saldo) → 1477000
AVG(col) Promedio AVG(score) → 689
MIN(col) Valor mínimo MIN(score) → 590
MAX(col) Valor máximo MAX(saldo) → 890000
COUNT(*) vs COUNT(col): esta diferencia es CRÍTICA y aparece en entrevistas técnicas. COUNT(*) cuenta TODAS las filas sin importar nada. COUNT(email) cuenta solo las filas donde email NO es NULL. Si tenés 5 clientes y 2 no tienen email: COUNT(*) = 5, COUNT(email) = 3.
AVG y los NULLs: AVG() ignora los NULLs, no los trata como 0. Esto es importante: si tenés saldos [100, NULL, 200], AVG(saldo) = 150 (promedia solo los 2 valores existentes), NO 100 (promedio con 0 incluido). Esto puede distorsionar resultados si hay muchos NULLs.

COUNT(DISTINCT col)

Combina conteo con deduplicación: cuenta cuántos valores ÚNICOS hay en una columna.

SELECT COUNT(*) AS total_registros,
       COUNT(DISTINCT cliente) AS clientes_unicos,
       COUNT(DISTINCT ciudad) AS ciudades
FROM transacciones;

Combinar agregaciones con WHERE

WHERE filtra ANTES de agregar. Esto te permite calcular estadísticas sobre un subconjunto:

-- Promedio de score SOLO de clientes activos
SELECT AVG(score) AS avg_score_activos
FROM clientes
WHERE activo = 1;

ROUND con agregaciones

ROUND(valor, decimales) redondea. Se usa constantemente con AVG y cálculos de porcentaje:

SELECT ROUND(AVG(score), 0) AS score_promedio,
       ROUND(AVG(saldo), 2) AS saldo_promedio,
       ROUND(SUM(saldo) * 100.0 / 1000000, 1) AS pct_del_millon
FROM clientes;
En el trabajo: las funciones de agregación son el corazón de TODOS los reportes. "Total de ventas del mes", "Clientes nuevos esta semana", "Saldo promedio por segmento", "Score máximo de la cartera". Sin GROUP BY (siguiente lección), las agregaciones resumen TODA la tabla en una sola fila. Con GROUP BY, podés resumir por categoría.
Equivalencia con pandas: COUNT(*) = len(df), SUM(col) = df["col"].sum(), AVG(col) = df["col"].mean(), COUNT(DISTINCT col) = df["col"].nunique(). Las mismas operaciones, distinto lenguaje.
02

Ejemplos explicados paso a paso

Ejemplo 1: Las 5 funciones en acción

ejemplo_01_basicas.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 2: COUNT(*) vs COUNT(col) — la diferencia clave

ejemplo_02_count.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 3: Agregaciones con WHERE

ejemplo_03_where.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 4: Dashboard de métricas en una consulta

ejemplo_04_dashboard.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 5: Estadísticas de transacciones

ejemplo_05_transacciones.sqlSQL

        
Hacé clic en ▶ Ejecutar
03

Referencia rápida

Función Descripción NULLs Equivalente pandas
COUNT(*) Total de filas Cuenta todo len(df)
COUNT(col) Filas no-NULL Ignora df["col"].count()
COUNT(DISTINCT col) Valores únicos Ignora df["col"].nunique()
SUM(col) Suma Ignora df["col"].sum()
AVG(col) Promedio Ignora df["col"].mean()
MIN(col) Mínimo Ignora df["col"].min()
MAX(col) Máximo Ignora df["col"].max()
04

Ejercicios

Nivel 1 · Básico

Ejercicio 1: COUNT(*)

Contá el total de productos. Debe incluir 5.

ejercicio_01.sqlDebe incluir "5"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 2: SUM

Calculá el saldo total de todos los clientes. Debe incluir 1477000.

ejercicio_02.sqlDebe incluir "1477000"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 3: AVG con ROUND

Calculá el score promedio redondeado a entero. Debe incluir 689.

ejercicio_03.sqlDebe incluir "689"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 4: MIN y MAX

Encontrá el score mínimo y máximo, y la diferencia (rango). Debe incluir 220.

ejercicio_04.sqlDebe incluir "220"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 5: COUNT(*) vs COUNT(col)

Mostrá COUNT(*) y COUNT(email) para ver la diferencia. Debe incluir 3 (los que tienen email).

ejercicio_05.sqlDebe incluir "3"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 6: Agregación con WHERE

Calculá saldo promedio de clientes activos de Buenos Aires. Debe incluir 416667.

ejercicio_06.sqlDebe incluir "416667"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 7: COUNT(DISTINCT)

De una tabla de transacciones, contá transacciones totales, clientes únicos y tipos únicos. Debe incluir 3 (clientes).

ejercicio_07.sqlDebe incluir "3"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 8: Porcentaje del total

Calculá qué porcentaje del saldo total representa Buenos Aires. Debe incluir un porcentaje (redondeado).

ejercicio_08.sqlDebe incluir el porcentaje

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 9: Múltiples métricas con SUM+CASE

En una sola consulta: total de ventas, cantidad de compras, cantidad de ventas, monto promedio por tipo usando SUM+CASE. Debe incluir compra.

ejercicio_09.sqlDebe incluir "compra"

          
Hacé clic en ▶ Ejecutar
Nivel 4 · Desafío

Ejercicio 10: Reporte ejecutivo completo

Generá un "dashboard" en una sola fila: total clientes, activos, inactivos, % activos, saldo total, promedio, máximo, ciudades únicas, y cantidad de premium (score>=700). Debe incluir total.

ejercicio_10.sqlDebe incluir "total"

          
Hacé clic en ▶ Ejecutar
05

Resumen y conexión

En la siguiente lección (06 · GROUP BY y HAVING) vas a aprender a agrupar datos: estadísticas POR CIUDAD, POR TIPO, POR CATEGORÍA — el equivalente de df.groupby() en pandas.