Questions d’entretien SQL : 3 exercices de dépistage technique (pour les analystes de données)

Au cours des 6 dernières années, j’ai participé à de nombreux entretiens d’embauche – des deux côtés de la table. La partie la plus amusante, mais aussi la plus redoutée, du processus est la sélection technique. Dans cet article, je vais vous montrer trois exercices de test SQL qui, d’après mon expérience, sont assez typiques des entretiens d’embauche des analystes de données. (Et hé, ce sont des  » exemples  » de questions d’entretien SQL, mais elles sont fortement basées sur la réalité !)

Avant les tâches – À quoi pouvez-vous vous attendre lors d’un dépistage technique SQL ?

Il y a deux façons courantes de procéder à un dépistage technique SQL.

La façon la plus simple mais la moins courante est que vous obtenez un ordinateur, un ensemble de données et une tâche. Pendant que vous résolvez la tâche, les interviewers observent et posent des questions. Un peu d’essai et d’erreur est tout à fait correct, tant que vous parvenez à trouver la bonne solution dans un délai raisonnable.

L’autre façon, plus difficile (et d’ailleurs beaucoup plus courante) est l’entretien sur tableau blanc. Dans ce cas, vous n’avez pas d’ordinateur. Vous devez résoudre la tâche et esquisser le code sur un tableau blanc. Cela signifie que vous n’obtiendrez pas de retour (du moins pas d’un ordinateur) pour savoir si vous avez commis une erreur de logique ou de syntaxe dans votre code. Bien sûr, vous pouvez toujours résoudre les tâches en réfléchissant de manière itérative (en résolvant les différents problèmes SQL un par un), mais vous devez être très confiant dans vos compétences SQL.

En outre, vous devez généralement résoudre les tâches à la volée. Vous aurez peut-être 3 à 5 minutes de temps de réflexion, mais c’est le maximum que vous pouvez espérer. La bonne nouvelle est qu’à cause de cela, vous obtiendrez des tâches relativement plus simples. (Voir le niveau de difficulté ci-dessous !)

Note : il existe d’autres types de dépistage technologique – comme le devoir à emporter – où vous pouvez prouver que vous pouvez résoudre des défis de codage plus complexes, aussi.

Testez-vous !

Voici trois questions d’entretien SQL qui sont vraiment proches de ce que j’ai réellement obtenu ou donné lors d’entretiens d’embauche d’analystes de données/scientifiques !
Essayez de les résoudre toutes comme s’il s’agissait d’entretiens sur tableau blanc !
Dans la deuxième moitié de l’article, je vous montrerai les solutions, aussi !

Question d’entretien SQL #1

Disons que vous avez deux tables SQL : authors et books.
Le jeu de données authors a 1M+ rangs ; voici les six premiers rangs :

.

nom de l’auteur nom du livre
auteur_1 livre_1
auteur_1 livre_2
auteur_2 livre_3
auteur_2 livre_4
auteur_2 livre_5
auteur_3 livre_6

L’ensemble de données books a également 1M+ lignes et voici les six premières :

.

nom du livre copies vendues
livre_1 1000
livre_2 1500
livre_3 34000
book_4 29000
book_5 40000
book_6 4400

Créer une requête SQL qui montre le TOP 3 des auteurs qui ont vendu le plus de livres au total !

(Note : j’ai reçu une question d’entretien SQL très, très similaire pour un poste de data scientist dans une entreprise informatique suédoise très connue.)

Question d’entretien SQL n°2

Vous travaillez pour une startup qui fabrique un logiciel de présentation en ligne. Vous avez un journal des événements qui enregistre chaque fois qu’un utilisateur a inséré une image dans une présentation. (Un utilisateur peut insérer plusieurs images.) La table SQL event_log ressemble à ceci :

.

user_id event_date_time
7494212 1535308430
7494212 1535308433
1475185 1535308444
6946725 1535308475
6946725 1535308476
6946725 1535308477

…et il a plus d’un milliard de lignes.
Note : Si le format de la colonne event_date_time ne vous semble pas familier, googlez « epoch timestamp » !

Ecrivez une requête SQL pour savoir combien d’utilisateurs ont inséré plus de 1000 mais moins de 2000 images dans leurs présentations !

(Remarque : j’ai personnellement créé et utilisé cette question d’entretien pour tester les analystes de données lorsque je travaillais en freelance et que mes clients avaient besoin d’aide dans leur processus d’embauche.)

Question d’entretien SQL n°3

Vous avez deux tables SQL ! La première s’appelle employees et elle contient les noms des employés, les identifiants uniques des employés et les noms des départements d’une entreprise. Exemple :

.

nom du département id de l’employé nom de l’employé
Ventes 123 John Doe
Sales 211 Jane Smith
HR 556 Billy Bob
Ventes 711 Robert Hayek
Marketing 235 Edward Jorgson
Marketing 236 Christine Packard

La seconde est nommée salaries. Il contient les mêmes noms d’employés et les mêmes identifiants d’employés – et les salaires de chaque employé. Exemple :

.

salaire id_employé nom_employé
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 société a 546 employés, donc les deux tables ont 546 lignes.

Imprimez chaque département où le salaire moyen par employé est inférieur à 500 $ !

(Remarque : j’ai créé cette question de test en me basant sur une vraie question d’entretien SQL que j’ai entendue d’un ami, qui a postulé dans l’une des plus grandes entreprises de médias sociaux (le nom commence par ‘F.’ :))

Solution de la question d’entretien SQL #1

Le code de la solution est :

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;

Et voici une courte explication :

1. Vous devez d’abord initier le JOIN. J’ai joint les deux tables en utilisant :

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

2. Après cela, j’ai utilisé une fonction SUM() avec une clause GROUP BY. Cela signifie que dans l’instruction SELECT, j’ai dû remplacer les * par les colonnes author_name et sold_copies. (Il n’est pas obligatoire d’indiquer à partir de quelle table vous sélectionnez les colonnes, mais cela en vaut la peine. C’est pourquoi j’ai utilisé authors.author_name et books.sold_copies.)

3. Finalement, j’ai ORDERmis les résultats dans un ordre DESCterminant. (Juste pour ma commodité, j’ai également renommé la colonne sum en sold_sum en utilisant la méthode AS sold_sum dans l’instruction SELECT.)

Solution de la question d’entretien SQL n°2

La requête SQL est :

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;

L’astuce dans cette tâche est que vous avez dû utiliser la fonction COUNT() deux fois : d’abord, vous avez dû compter le nombre d’images par utilisateur, puis le nombre d’utilisateurs (qui remplissent la condition donnée). La façon la plus simple de le faire est d’utiliser une sous-requête.

  1. Écrivez d’abord la requête interne ! Exécutez une simple fonction COUNT() avec une clause GROUP BY sur la table event_log.
  2. Assurez-vous de créer un alias pour la sous-requête (AS image_per_user). C’est une exigence syntaxique en SQL.
  3. Éventuellement, dans une requête externe, appliquez un filtre WHERE et une fonction COUNT() sur le résultat de la sous-requête.

Solution de la question d’entretien SQL n°3

Solution:

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

Note : vous pouvez aussi résoudre cette tâche en utilisant une sous-requête – mais en situation d’entretien, le comité préférera la solution ci-dessus.

Explication succincte:

1. D’abord JOINDRE les deux tables:

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

Attention ! Utilisez la colonne employee_id – pas la employee_name. (Vous pouvez toujours avoir deux John Does dans une entreprise, mais l’id de l’employé est unique !)

2. Utilisez ensuite une fonction AVG() avec une clause GROUP BY – et remplacez les * par les colonnes appropriées. (Tout comme dans la première tâche.)

3. Et la dernière étape consiste à utiliser une clause HAVING pour filtrer par le résultat de la fonction AVG(). (Rappelez-vous : WHERE n’est pas bon ici parce qu’il serait initié avant la fonction AVG().)
Attention : dans la ligne HAVING, vous ne pouvez pas faire référence à l’alias – vous devez utiliser à nouveau la fonction entière elle-même !

Préparez-vous aux examens techniques SQL en vous exerçant !

Si vous avez réussi à résoudre correctement toutes ces questions, vous êtes probablement prêt pour un dépistage technique SQL d’analyste de données junior ou même de niveau intermédiaire.
Sinon, laissez-moi vous recommander mon nouveau cours en ligne : SQL for Aspiring Data Scientists (cours en ligne de 7 jours) – où vous pouvez mettre à niveau (ou rafraîchir) vos compétences SQL en seulement 7 jours. Lorsque vous aurez terminé le cours, revenez simplement à cet article et je vous garantis que vous serez en mesure de résoudre ces questions!

SQL for Aspiring Data Scientists (7-day online course)

Et si vous êtes sur le point de commencer avec SQL, commencez par ma série SQL For Data Analysis sur le blog!

Conclusion

La partie difficile de ces questions d’entretien SQL est qu’elles sont abstraites. Les tâches disent d' »imaginer les ensembles de données » et n’en montrent que quelques lignes. Lorsque vous obtenez un exercice comme celui-ci, il est très utile d’avoir vu des ensembles de données similaires et d’avoir résolu des problèmes similaires auparavant. J’espère que la résolution des tâches de cet article renforcera votre confiance!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.