Pregunta de entrevista para Analista de datos

¿Cuándo usas WHERE y cuándo HAVING?

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

WHERE filtra filas individuales antes de agregar; HAVING filtra grupos después de agregar. Así que filtras por columnas en crudo en el WHERE y por resultados agregados como COUNT o SUM en el HAVING. Filtra todo lo que puedas en el WHERE, ya que reducir filas antes de agrupar sale más barato. Un bug común es meter un filtro de fecha en el HAVING, que aun así agrega todo primero y puede cambiar los resultados.

Por qué lo preguntan los entrevistadores

Revela si entiendes el orden lógico de operaciones de SQL en vez de reconocer sintaxis por patrones. Los entrevistadores suelen encadenar con preguntas relacionadas sobre por qué no puedes referenciar un alias de columna en el WHERE, o por qué un filtro colocado en la cláusula equivocada cambió los números, y ambas salen del mismo orden de ejecución subyacente.

Cómo estructurar tu respuesta

  • Ancla la respuesta en el orden lógico de ejecución.
  • Da la regla: columnas en crudo en WHERE, agregados en HAVING.
  • Explica la razón de rendimiento para filtrar pronto.
  • Menciona la visibilidad de los alias como consecuencia del mismo orden.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

Se reduce a cuándo se ejecuta cada cláusula. WHERE ocurre antes de agrupar, así que filtra filas individuales. HAVING ocurre después, así que filtra los grupos ya agregados. Si quiero los pedidos de este año, eso es WHERE. Si quiero solo los clientes con más de cinco pedidos, tiene que ser HAVING, porque el conteo todavía no existe en el momento del WHERE. Siempre empujo los filtros lo más adentro posible del WHERE, ya que agrupar diez mil filas en vez de diez millones marca una diferencia real en una tabla grande. El mismo orden de ejecución explica algo que despista a mucha gente: no puedes referenciar un alias del SELECT en el WHERE, porque la lista del SELECT se evalúa después del filtro, aunque la mayoría de motores te dejan usar el alias en GROUP BY y ORDER BY, lo que parece incoherente hasta que conoces el orden. Y el bug que de verdad he tenido que arreglar fue un filtro de fecha en el HAVING que producía totales con buena pinta sobre la ventana equivocada.

¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.

Mira cómo funciona

Preguntas de seguimiento que puedes esperar

  • ¿Por qué no puedes usar un alias del SELECT en la cláusula WHERE?
  • ¿Cómo filtrarías por un agregado sin HAVING?
  • ¿Cuál es el orden lógico de ejecución de una sentencia SELECT?

Más preguntas para Analista de datos

Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.

Predecir mis preguntas

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot