Preguntas de la entrevista SQL: 3 ejercicios de selección técnica (para analistas de datos)

Durante los últimos 6 años he sido parte de muchas entrevistas de trabajo – en ambos lados de la mesa. La parte más divertida, pero también la más temida, del proceso es la selección técnica. En este artículo, te mostraré tres ejercicios de prueba de SQL que, según mi experiencia, son bastante típicos en las entrevistas de trabajo para analistas de datos. (Y oye, estas son preguntas de entrevista de SQL «de ejemplo», pero están fuertemente basadas en la realidad!)

Antes de las tareas – ¿Qué puedes esperar en una selección técnica de SQL?

Hay dos formas comunes en que se puede hacer una selección técnica de SQL.

La forma más simple pero menos común es que se obtiene un ordenador, un conjunto de datos y una tarea. Mientras resuelves la tarea, los entrevistadores te observan y te hacen preguntas. Un poco de ensayo y error está totalmente bien, siempre y cuando puedas llegar a la solución correcta en un tiempo razonable.

La otra forma, más difícil (y por cierto mucho más común) es la entrevista de pizarra. En este caso, no tienes un ordenador. Tienes que resolver la tarea y esbozar el código en una pizarra. Esto significa que no recibirás información (al menos no de un ordenador) sobre si has cometido un error lógico o de sintaxis en tu código. Por supuesto, puedes resolver las tareas pensando de forma iterativa (resolviendo los diferentes problemas SQL uno por uno), pero tienes que estar muy seguro de tus habilidades SQL.

Además, normalmente tienes que resolver las tareas sobre la marcha. Quizás tengas entre 3 y 5 minutos de tiempo para pensar, pero eso es lo máximo que puedes esperar. La buena noticia es que debido a eso tendrás tareas relativamente más sencillas. (¡Mira el nivel de dificultad más abajo!)

Nota: hay otros tipos de pruebas tecnológicas -como la tarea para llevar a casa- en las que puedes demostrar que también puedes resolver retos de codificación más complejos.

¡Ponte a prueba!

Aquí hay tres preguntas de la entrevista SQL que son realmente cerca de lo que realmente me dieron o dieron en las entrevistas de trabajo de analista de datos / científico!
Trate de resolver todos ellos como si fueran entrevistas de pizarra!
En la segunda mitad del artículo, te mostraré las soluciones, también!

Pregunta de la entrevista SQL # 1

Supongamos que usted tiene dos tablas SQL: authors y books.
El conjunto de datos authors tiene más de 1M de filas; aquí están las seis primeras filas:

nombre_del_autor nombre_del_libro
autor_1 libro_1
autor_1 libro_2
autor_2 libro_3
autor_2 libro_4
autor_2 libro_5
autor_3 libro_6

El conjunto de datos books también tiene 1M+ filas y aquí están las seis primeras:

nombre_del_libro copias_vendidas
libro_1 1000
libro_2 1500
libro_3 34000
libro_4 29000
libro_5 40000
libro_6 4400

¡Crea una consulta SQL que muestre el TOP 3 de autores que más libros han vendido en total!

(Nota: Me hicieron una pregunta de entrevista SQL muy, muy similar para un puesto de científico de datos en una empresa sueca de TI muy conocida.)

Pregunta de entrevista SQL #2

Trabajas para una startup que hace un software de presentación en línea. Usted tiene un registro de eventos que registra cada vez que un usuario insertó una imagen en una presentación. (Un usuario puede insertar varias imágenes.) La tabla event_log SQL tiene el siguiente aspecto:

identificación_de_usuario fecha_de_evento
7494212 1535308430
494212 1535308433
1475185 1535308444
6946725 1535308475
6946725 1535308476
6946725 1535308477

…y tiene más de mil millones de filas.
Nota: Si el formato de la columna event_date_time no te resulta familiar, ¡busca en Google «epoch timestamp»!

¡Escribe una consulta SQL para averiguar cuántos usuarios insertaron más de 1000 pero menos de 2000 imágenes en sus presentaciones!

(Nota: personalmente creé y utilicé esta pregunta de entrevista para poner a prueba a los analistas de datos cuando trabajaba como freelance y mis clientes necesitaban ayuda en su proceso de contratación.)

Pregunta de entrevista SQL nº 3

¡Tienes dos tablas SQL! La primera se llama employees y contiene los nombres de los empleados, los ids únicos de los empleados y los nombres de los departamentos de una empresa. Ejemplo:

nombre_departamento identidad_de_empleado nombre_de_empleado
Ventas 123 John Doe
Ventas 211 Jane Smith
HR 556 Billy Bob
Ventas 711 Robert Hayek
Marketing 235 Edward Jorgson
Marketing 236 Christine Packard

La segunda se llama salaries. Contiene los mismos nombres de empleados y los mismos identificadores de empleados – y los salarios de cada empleado. Ejemplo:

salario identidad_empleado nombre_empleado
500 123 John Doe
600 211 Jane Smith
1000 556 Billy Bob
400 711 Robert Hayek
1200 235 Edward Jorgson
200 236 Christine Packard

La empresa tiene 546 empleados, por lo que ambas tablas tienen 546 filas.

¡Imprime todos los departamentos en los que el salario medio por empleado sea inferior a 500 dólares!

(Nota: he creado esta pregunta de prueba basándome en una pregunta real de una entrevista SQL que me hizo un amigo, que se presentó a una de las mayores empresas de medios sociales (el nombre empieza por ‘F.’ :))

Solución de la pregunta de la entrevista SQL #1

El código de la solución es:

SELECT authors.author_name, SUM(books.sold_copies) AS sold_sumFROM authorsJOIN booksON books.book_name = authors.book_nameGROUP BY authors.author_nameORDER BY sold_sum DESCLIMIT 3;

Y aquí está una breve explicación:

1. Primero hay que iniciar el JOIN. Yo uní las dos tablas utilizando:

SELECT *FROM authorsJOIN booksON books.book_name = authors.book_name;

2. Después, utilicé una función SUM() con una cláusula GROUP BY. Esto significa que en la sentencia SELECT tuve que sustituir la * por las columnas author_name y sold_copies. (No es obligatorio indicar de qué tabla se seleccionan las columnas, pero vale la pena hacerlo. Por eso utilicé authors.author_name y books.sold_copies.)

3. Finalmente, ORDERedité los resultados en DESCorden final. (Sólo para mi comodidad, también cambié el nombre de la columna sum a sold_sum usando el método AS sold_sum en la sentencia SELECT.)

Solución de la pregunta de entrevista SQL #2

La consulta SQL es:

SELECT COUNT(*) FROM (SELECT user_id, COUNT(event_date_time) AS image_per_user FROM event_log GROUP BY user_id) AS image_per_userWHERE image_per_user < 2000 AND image_per_user > 1000;

El truco en esta tarea es que tuviste que usar la función COUNT() dos veces: primero, tuviste que contar el número de imágenes por usuario, luego el número de usuarios (que cumplen la condición dada). La forma más fácil de hacerlo es utilizar una subconsulta.

  1. ¡Escribe primero la consulta interna! Ejecute una simple función COUNT() con una cláusula GROUP BY en la tabla event_log.
  2. Asegúrese de crear un alias para la subconsulta (AS image_per_user). Es un requisito sintáctico en SQL.
  3. Eventualmente, en una consulta externa, aplica un filtro WHERE y una función COUNT() sobre el resultado de la subconsulta.

Solución de la pregunta de entrevista de SQL nº 3

Solución:

SELECT department_name, AVG(salaries.salary) AS avg_salariesFROM employeesJOIN salariesON employees.employee_id = salaries.employee_idGROUP BY department_nameHAVING AVG(salaries.salary) < 500;

Nota: También puede resolver esta tarea utilizando una subconsulta – pero en una situación de entrevista al comité le gustará más la solución anterior.

Breve explicación:

1. Primero junte las dos tablas:

SELECT *FROM employeesJOIN salariesON employees.employee_id = salaries.employee_id

¡Cuidado! Usa la columna employee_id – no la employee_name. (Siempre puedes tener dos Juanes en una empresa, ¡pero el id de empleado es único!)

2. Luego usa una función AVG() con una cláusula GROUP BY – y reemplaza el * con las columnas apropiadas. (Igual que en la primera tarea.)

3. Y el último paso es utilizar una cláusula HAVING para filtrar por el resultado de la función AVG(). (Recuerda: WHERE no sirve aquí porque se iniciaría antes de la función AVG().)
Cuidado: en la línea HAVING, no puedes hacer referencia al alias – ¡tienes que usar la función completa de nuevo!

¡Prepárate para las pruebas técnicas de SQL practicando!

Si has conseguido resolver todas estas preguntas correctamente, probablemente estés preparado para una revisión técnica de SQL para analistas de datos junior o incluso de nivel medio.
Si no es así, déjame recomendarte mi nuevo curso online: SQL for Aspiring Data Scientists (curso online de 7 días) – en el que podrás subir de nivel (o repasar) tus conocimientos de SQL en sólo 7 días. Cuando termines el curso, vuelve a este artículo y te garantizo que serás capaz de resolver estas preguntas!

SQL para aspirantes a científicos de datos (curso online de 7 días)

Y si estás a punto de empezar con SQL, ¡empieza con mi serie SQL para el análisis de datos en el blog!

Conclusión

La parte difícil de estas preguntas de entrevista de SQL es que son abstractas. Las tareas dicen que hay que «imaginar los conjuntos de datos» y mostrar sólo unas pocas líneas de ellos. Cuando se hace un ejercicio así, ayuda mucho si se han visto conjuntos de datos similares y se han resuelto problemas similares antes. Espero que la resolución de las tareas de este artículo aumente tu confianza.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.