Operadores y filtros avanzados
CASE WHEN te permite crear columnas condicionales (como if/else de Python). COALESCE reemplaza NULLs. CAST convierte tipos. Estas herramientas transforman datos directamente en la consulta, sin necesidad de programar fuera de SQL.
Concepto teórico
CASE WHEN — el if/else de SQL
CASE WHEN evalúa condiciones y devuelve valores distintos según cuál se cumpla. Es la herramienta
más poderosa para clasificar datos dentro de una consulta:
SELECT nombre,
score,
CASE
WHEN score >= 800 THEN 'Excelente'
WHEN score >= 700 THEN 'Bueno'
WHEN score >= 600 THEN 'Regular'
ELSE 'Bajo'
END AS categoria
FROM clientes;
CASE WHEN se puede usar en:
- SELECT: para crear columnas calculadas
- WHERE: para filtros condicionales (menos común)
- ORDER BY: para ordenar por lógica custom
- Dentro de funciones de agregación:
SUM(CASE WHEN ... THEN 1 ELSE 0 END)para contar condicionalmente
COALESCE — reemplazar NULLs
COALESCE(valor1, valor2, ...) devuelve el primer valor que NO sea NULL. Es la forma estándar de
manejar datos faltantes:
-- Si email es NULL, mostrar 'sin email' SELECT nombre, COALESCE(email, 'sin email') AS contacto FROM clientes;
NULLIF — convertir valores a NULL
NULLIF(a, b) devuelve NULL si a = b, o devuelve a si son distintos. Útil para evitar divisiones
por cero:
-- Evitar división por cero: si cantidad es 0, NULLIF la convierte a NULL SELECT total / NULLIF(cantidad, 0) AS precio_unitario FROM ventas;
CAST — convertir tipos
CAST(valor AS tipo) convierte entre tipos. Útil cuando un campo numérico está guardado como texto:
SELECT CAST('42' AS INTEGER); -- texto → entero
SELECT CAST(3.14 AS INTEGER); -- decimal → entero (trunca)
SELECT CAST(42 AS TEXT); -- entero → texto
SELECT ROUND(precio, 2); -- redondear a 2 decimales
Columnas calculadas
Podés hacer cálculos directamente en el SELECT. El resultado aparece como una nueva columna:
SELECT nombre,
saldo,
saldo * 0.21 AS iva,
saldo * 1.21 AS con_iva,
ROUND(cuota * 100.0 / ingreso, 1) AS ratio_pct
FROM clientes;
5 / 2 da 2 (no 2.5)
porque ambos son enteros. Para obtener decimal, multiplicá por 1.0: 5 * 1.0 / 2 da
2.5. O usá CAST(5 AS REAL) / 2.
Ejemplos explicados paso a paso
Ejemplo 1: CASE WHEN para clasificar
Hacé clic en ▶ Ejecutar
Ejemplo 2: COALESCE para reemplazar NULLs
Hacé clic en ▶ Ejecutar
Ejemplo 3: Columnas calculadas y ROUND
Hacé clic en ▶ Ejecutar
Ejemplo 4: CASE WHEN dentro de agregación (contar condicionalmente)
Hacé clic en ▶ Ejecutar
Ejemplo 5: NULLIF para evitar división por cero + CAST
Hacé clic en ▶ Ejecutar
Referencia rápida
| Función | Sintaxis | Uso |
|---|---|---|
| CASE WHEN | CASE WHEN cond THEN val ELSE val END |
Clasificar, condicional |
| COALESCE | COALESCE(v1, v2, ...) |
Primer no-NULL |
| NULLIF | NULLIF(a, b) |
NULL si a=b (evitar /0) |
| CAST | CAST(val AS tipo) |
Convertir tipos |
| ROUND | ROUND(val, decimales) |
Redondear |
| Cálculos | col1 * col2 AS resultado |
Columnas derivadas |
Ejercicios
Ejercicio 1: CASE WHEN simple
Clasificá cada cliente como 'Premium' (score>=700) o 'Estándar'. Debe incluir Premium.
Hacé clic en ▶ Ejecutar
Ejercicio 2: COALESCE
Reemplazá NULLs de email por 'no registrado'. Debe incluir no registrado.
Hacé clic en ▶ Ejecutar
Ejercicio 3: Columna calculada
Mostrá cada producto con su precio con IVA (precio * 1.21). Debe incluir 1113200.
Hacé clic en ▶ Ejecutar
Ejercicio 4: CASE WHEN con múltiples niveles
Clasificá scores en 4 categorías: Excelente (>=800), Bueno (>=700), Regular (>=600), Bajo. Debe incluir
Excelente.
Hacé clic en ▶ Ejecutar
Ejercicio 5: Ratio cuota/ingreso con ROUND
Calculá el ratio cuota/ingreso en porcentaje con 1 decimal. Debe incluir 12.0.
Hacé clic en ▶ Ejecutar
Ejercicio 6: NULLIF para evitar /0
Calculá rotación (ventas/stock) evitando división por cero con NULLIF. Debe incluir 8.0.
Hacé clic en ▶ Ejecutar
Ejercicio 7: SUM + CASE para contar categorías
Contá cuántos clientes son Premium (score>=700) y cuántos no, en una sola fila. Debe incluir 3.
Hacé clic en ▶ Ejecutar
Ejercicio 8: CASE WHEN + COALESCE combinados
Creá columna "contacto" que use email si existe, teléfono si no, o "SIN CONTACTO" si ninguno. Clasificá
clientes según si tienen contacto o no. Debe incluir SIN CONTACTO.
Hacé clic en ▶ Ejecutar
Ejercicio 9: Ratio + CASE para decisión de crédito
Calculá ratio cuota/ingreso y clasificá en APROBADO (<=30%) o RECHAZADO (>30%). Debe incluir
APROBADO.
Hacé clic en ▶ Ejecutar
Ejercicio 10: Reporte completo con todas las herramientas
Generá un reporte que muestre: nombre, score, categoría (CASE WHEN 4 niveles), email limpio (COALESCE), saldo
con IVA, y el % que cada saldo representa del total. Debe incluir Excelente.
Hacé clic en ▶ Ejecutar
Resumen y conexión
CASE WHEN ... THEN ... ELSE ... ENDes el if/else de SQL — clasificar datos en la consulta.COALESCE(v1, v2)devuelve el primer valor no-NULL — reemplazar datos faltantes.NULLIF(a, b)devuelve NULL si a=b — evitar divisiones por cero.CAST(val AS tipo)convierte tipos.ROUND(val, n)redondea.- Columnas calculadas (
col * 1.21 AS con_iva) crean datos derivados sin tocar la tabla original. SUM(CASE WHEN ... THEN 1 ELSE 0 END)cuenta condicionalmente.
En la siguiente lección (04 · ORDER BY, LIMIT, DISTINCT) vas a aprender a ordenar, paginar y deduplicar resultados.