CTEs, CASE y NULL

Objetivo

Construir consultas legibles y reglas de negocio auditables.

Explicación

Una CTE nombra un paso intermedio. CASE codifica categorías; COALESCE trata valores nulos cuando existe una regla de negocio explícita. No conviertas todos los NULL a cero sin entender su significado. En un equipo de datos, SQL no se evalúa sólo por devolver filas: debe responder una pregunta de negocio, conservar el grain correcto y permitir que otra persona valide el resultado. Esta práctica usa el ecommerce del curso para obligarte a reconciliar conteos y totales, igual que harías antes de publicar una métrica en un dashboard. Para trabajar CTEs, CASE y NULL de forma profesional, no te quedes con el ejemplo: identifica la entrada, ejecuta el caso base, provoca al menos un caso incorrecto y compara el resultado con un control independiente. En este laboratorio el criterio de salida es concreto: Clientes sin pedidos permanecen en el resultado; su revenue se presenta como 0. La verificación principal será: Comprueba que ningún cliente desaparece respecto a customers. Si no puedes explicar por qué pasa esa comprobación, vuelve al paso anterior antes de continuar.

Contexto profesional

En un equipo de datos, SQL no se evalúa sólo por devolver filas: debe responder una pregunta de negocio, conservar el grain correcto y permitir que otra persona valide el resultado. Esta práctica usa el ecommerce del curso para obligarte a reconciliar conteos y totales, igual que harías antes de publicar una métrica en un dashboard.

Ejemplo real

WITH completed AS (
 SELECT * FROM orders WHERE status='COMPLETED'
)
SELECT customer_id,
 CASE WHEN amount>=200 THEN 'HIGH' WHEN amount>=100 THEN 'MEDIUM' ELSE 'LOW' END AS band,
 amount
FROM completed;

Archivos o datos de entrada

  • data/ecommerce_customers.csv
  • data/ecommerce_orders.csv

Práctica guiada

Crea bandas de importe y cuenta pedidos por banda.

Laboratorio paso a paso

  • Prepara el entorno y localiza los datos/archivos de entrada: data/ecommerce_customers.csv, data/ecommerce_orders.csv. Antes de modificar nada, anota el número de filas, columnas u objetos que esperas usar.
  • Reproduce el ejemplo real de la lección y guarda la salida. No avances hasta poder explicar qué hace cada bloque relacionado con «CTEs, CASE y NULL».
  • Ejecuta la práctica guiada: Crea bandas de importe y cuenta pedidos por banda. Documenta el comando, consulta o acción exacta y el resultado obtenido.
  • Resuelve el reto sin mirar la solución: Añade clientes sin pedidos con LEFT JOIN y muestra revenue 0 sólo en la salida final. Si falla, registra el mensaje de error y formula una hipótesis antes de cambiar código.
  • Compara tu resultado con el criterio esperado: Clientes sin pedidos permanecen en el resultado; su revenue se presenta como 0. Después ejecuta la comprobación: Comprueba que ningún cliente desaparece respecto a customers.
  • Provoca deliberadamente un caso problemático relacionado con este error frecuente: Filtrar columnas de la tabla derecha en WHERE puede convertir un LEFT JOIN en INNER.. Comprueba que sabes detectarlo y corregirlo.

Reto sin ayuda

Añade clientes sin pedidos con LEFT JOIN y muestra revenue 0 sólo en la salida final.

Resultado esperado

Clientes sin pedidos permanecen en el resultado; su revenue se presenta como 0.

Cómo verificarlo

Comprueba que ningún cliente desaparece respecto a customers.

Checklist de validación

  • El resultado cumple: Clientes sin pedidos permanecen en el resultado; su revenue se presenta como 0.
  • Has ejecutado esta verificación y puedes explicar el resultado: Comprueba que ningún cliente desaparece respecto a customers.
  • Has probado al menos un caso límite o dato inválido y el comportamiento es explícito, no silencioso.
  • Puedes repetir la práctica desde cero sin copiar la solución y dejar evidencia (consulta, commit, captura o salida de consola).
Pista específica

Agrega orders antes o usa COALESCE(SUM(…),0).

Solución paso a paso

1) Empieza reproduciendo el caso base con los datos indicados. 2) Aplica esta estrategia específica: Parte en CTE: orders_agg y luego LEFT JOIN customers. 3) Usa como referencia técnica el ejemplo de la lección (WITH completed AS ( SELECT * FROM orders WHERE status=’COMPLETED’ ) SELECT customer_id, CASE WHEN amount>=200 THEN ‘HIGH’ WHEN amount>=100 THEN ‘MEDIUM’ ELSE ‘LOW’ END AS band, amount FROM completed;). 4) Ejecuta la verificación: Comprueba que ningún cliente desaparece respecto a customers. 5) Compara con el resultado esperado: Clientes sin pedidos permanecen en el resultado; su revenue se presenta como 0. 6) Repite el reto cambiando un dato o condición para demostrar que entiendes el comportamiento y no has obtenido el resultado por casualidad. Si aparece el error «Filtrar columnas de la tabla derecha en WHERE puede convertir un LEFT JOIN en INNER.», corrige la causa antes de continuar; no ocultes el fallo ni cambies el resultado esperado para que la prueba pase.

Errores frecuentes

  • Filtrar columnas de la tabla derecha en WHERE puede convertir un LEFT JOIN en INNER.

Qué debes recordar

Debes poder explicar qué filas produce la consulta y por qué.

Preguntas de entrevista

  • ¿Cómo demostrarías que una consulta no está duplicando métricas? Aplícalo concretamente a «CTEs, CASE y NULL».
  • ¿Qué comprobaciones harías antes de publicar este resultado a negocio? Explica qué evidencia enseñarías al revisor.

Siguiente paso

El siguiente bloque introduce funciones de ventana.

Recursos de esta lección

Quiz de la lección

¿Para qué sirve una CTE principalmente?

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.