Question d'entretien pour Analyste de données

Expliquez la différence entre ROW_NUMBER, RANK et DENSE_RANK.

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Les trois numérotent les lignes à l'intérieur d'une fenêtre. ROW_NUMBER donne à chaque ligne un numéro séquentiel unique, donc les ex aequo sont départagés arbitrairement. RANK donne le même numéro aux lignes ex aequo puis saute, ce qui produit 1, 2, 2, 4. DENSE_RANK donne le même numéro sans sauter, ce qui produit 1, 2, 2, 3. Utilisez ROW_NUMBER pour la déduplication, et RANK ou DENSE_RANK pour de vrais classements.

Pourquoi les recruteurs posent cette question

C'est un test de maîtrise du SQL rapide et sans ambiguïté, où il n'y a pas de place pour noyer le poisson, et la mise en pratique compte tout autant : choisir une ligne par groupe est une tâche quotidienne et ROW_NUMBER est le bon outil pour cela. Les recruteurs veulent aussi que vous remarquiez que ROW_NUMBER est non déterministe sur les ex aequo tant que votre ORDER BY n'inclut pas un critère de départage explicite.

Comment structurer votre réponse

  • Énoncez le comportement de numérotation de chacune avec l'exemple 1, 2, 2, 4.
  • Associez chaque fonction à la tâche pour laquelle elle est adaptée.
  • Prévenez que ROW_NUMBER sur des ex aequo a besoin d'un départage déterministe.
  • Montrez le motif standard pour prendre la dernière ligne par groupe.

Exemple de réponse

Exemple parlé, à la première personne

ROW_NUMBER donne toujours des entiers distincts, donc deux lignes ex aequo reçoivent quand même 1 et 2 dans l'ordre qui arrange le moteur. RANK leur donne 1 à toutes les deux puis saute à 3. DENSE_RANK leur donne 1 à toutes les deux et continue à 2. En pratique j'utilise ROW_NUMBER bien plus que les deux autres, parce que le travail le plus courant est la déduplication : partition by customer_id, order by updated_at descendant, garder les lignes où row_number vaut 1 pour obtenir le dernier enregistrement par client. Si je construis un top dix où les ex aequo doivent partager une place, c'est DENSE_RANK. Le piège avec ROW_NUMBER, c'est le déterminisme. Si updated_at est identique pour deux lignes, celle que vous gardez peut changer d'une exécution à l'autre, et j'ai vu un tableau de bord osciller entre deux valeurs exactement pour cette raison. J'ajoute donc une deuxième clé de tri, en général la clé primaire, pour que ce soit stable et reproductible.

Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.

Voir comment ça marche

Questions de relance à prévoir

  • Comment prendriez-vous les trois meilleurs produits par catégorie ?
  • Que se passe-t-il avec ROW_NUMBER si deux lignes ont des valeurs de tri identiques ?
  • En quoi NTILE diffère-t-il de ces trois fonctions ?

Autres questions pour Analyste de données

Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.

Prédire mes questions

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot