AccueilBlogTest technique SQL pour la data
Guide recrutement data

Test technique SQL pour la data : ce qu'on évalue vraiment en entretien

SQL reste le langage central de la data. Mais « savoir faire du SQL » va d'un SELECT ... WHERE à une requête analytique avec fenêtres imbriquées et diagnostic de performance. Voici comment mesurer l'écart réel.

Data Builder·Juillet 2025·10 min de lecture·Data Analyst / Analytics Engineer

SQL est le meilleur prédicteur global du niveau data : un profil solide en SQL l'est presque toujours ailleurs. En entretien, l'écart se creuse vite entre celui qui écrit un GROUP BY et celui qui raisonne sur un plan d'exécution. Voici les cinq dimensions que nous évaluons.

1Agrégations et GROUP BY

Question discriminante

Quelle est la différence entre WHERE et HAVING, et quand utiliser l'un ou l'autre ?

  • WHERE filtre les lignes avant l'agrégation ; HAVING filtre après, sur le résultat d'un agrégat.
  • Agrégats conditionnels : CASE dans SUM, ou COUNT(*) FILTER (WHERE ...).
  • Extensions GROUPING SETS, ROLLUP, CUBE pour des sous-totaux en une passe.
  • Pièges des NULL dans les agrégats (COUNT(col) ignore les NULL, pas COUNT(*)).

Signal d'alerte : un candidat qui met une condition d'agrégat dans le WHERE (ou qui confond WHERE et HAVING) révèle une compréhension de surface.

2Jointures

Question discriminante

Décrivez les types de jointures, et donnez un cas où une LEFT JOIN change le résultat d'un COUNT.

  • INNER / LEFT / RIGHT / FULL — savoir laquelle conserve les lignes non appariées.
  • Anti-jointure (LEFT JOIN ... WHERE b.id IS NULL) pour « ce qui n'existe pas en face ».
  • Auto-jointure pour comparer des lignes d'une même table (hiérarchies, doublons).
  • Le fan-out : une jointure 1-N qui duplique les lignes et double les montants sommés.

Signal d'alerte : ne pas repérer qu'une jointure 1-N gonfle un SUM est une erreur qui fausse des rapports en production.

3Fonctions fenêtre

Question discriminante

QUALIFY est au PARTITION BY ce que HAVING est au GROUP BY. Expliquez.

SELECT client_id, order_id, amount, ROW_NUMBER() OVER (PARTITION BY client_id ORDER BY order_date DESC) AS rn FROM orders QUALIFY rn = 1
  • Classement : ROW_NUMBER (unique), RANK (saute), DENSE_RANK (ne saute pas).
  • Décalage : LAG/LEAD pour comparer à la ligne précédente/suivante.
  • Cumuls : SUM() OVER (ORDER BY ...) ; cadre ROWS BETWEEN pour moyennes mobiles.
  • QUALIFY filtre sur une fonction fenêtre sans sous-requête (BigQuery, Snowflake, DuckDB).

4Lecture de requête et esprit critique

Question discriminante

On vous donne une requête et un résultat surprenant. Comment procédez-vous avant de conclure ?

  • Lire le résultat et la donnée : un COUNT qui sur-compte trahit souvent un fan-out.
  • Distinguer un vrai signal d'un écart non significatif (bruit) avant de recommander.
  • Vérifier les NULL, les doublons et la granularité de la table.
  • Reformuler l'intention métier de la requête, pas seulement sa syntaxe.

Signal d'alerte : prendre un chiffre agrégé pour argent comptant, sans le questionner, est un signal faible caractéristique.

5Performance

Question discriminante

Une requête est lente sur un gros volume. Par quoi commencez-vous ?

  • Lire le plan d'exécution (EXPLAIN) : scans, jointures, tris coûteux.
  • Réduire la donnée lue : éviter SELECT *, filtrer tôt, prédicats sargables.
  • Index / clustering / partitionnement adaptés au filtre et à la jointure.
  • Sur les entrepôts colonnes (BigQuery, Snowflake) : penser en colonnes scannées et coût, pas en index.

6Grille par niveau

NiveauMaîtrise attendueSignal GONO-GO
JuniorSELECT, WHERE, GROUP BY, jointures simplesÉcrit un GROUP BY correct, explique WHERE vs HAVINGMet une condition d'agrégat dans le WHERE
ConfirméFonctions fenêtre, CTE, anti-jointures, agrégats conditionnelsÉcrit un top-N par groupe, repère un fan-outNe sait pas différencier ROW_NUMBER, RANK, DENSE_RANK
SeniorOptimisation, plans d'exécution, Pareto/cumuls, QUALIFYLit un plan, questionne un résultat surprenantPrend un chiffre agrégé pour argent comptant
LeadModélisation, conventions, coûts à l'échelleArbitre coût/perf, fixe des standards d'équipeNe peut pas expliquer pourquoi une requête est lente

Vous recrutez un profil data ?

Data Builder mène l'entretien technique et vous livre un rapport clair et détaillé sous 24h. Premier entretien offert.

Tester gratuitementRéserver un appel