AccueilBlogTest SQL junior prêt à l'emploi
Tests prêts à l'emploi

Test SQL junior prêt à l'emploi : 5 requêtes pour valider les bases

Vous voulez vérifier les bases SQL d'un candidat sans y passer une heure ? Voici un test prêt à l'emploi : un jeu de données simple, 5 requêtes progressives à résoudre en 30 minutes, et pour chacune le corrigé, ce qu'elle révèle et l'erreur fréquente. Copiez-le tel quel.

Data Builder·Juillet 2025·10 min de lecture·Test SQL · niveau junior · 30 min · avec corrigé

Ce test valide le socle attendu d'un profil junior : filtrer, agréger, joindre et raisonner sur des données. Ce qui compte n'est pas la syntaxe exacte (elle varie selon le moteur) mais la démarche et la justesse du résultat.

1Le jeu de données

La consigne

Donnez ce schéma au candidat avant de commencer.

Une petite base e-commerce, volontairement simple : trois tables reliées par des identifiants. Aucune donnée réelle n'est nécessaire — le candidat raisonne sur le schéma.

-- Jeu de donnees du test (base e-commerce) clients(id, nom, pays, date_inscription) produits(id, nom, categorie, prix) commandes(id, client_id, produit_id, quantite, montant, date_commande, statut) -- statut ∈ ('payee','en_attente','annulee')

    2Question 1 — Compter les commandes par statut

    La consigne

    Combien de commandes y a-t-il dans chaque statut (payée, en attente, annulée) ?

    L'entrée en matière : un simple regroupement. Elle vérifie que le candidat maîtrise GROUP BY et COUNT.

    SELECT statut, COUNT(*) AS nb_commandes FROM commandes GROUP BY statut;
    • Une bonne réponse regroupe par statut et compte les lignes.
    • Erreur fréquente : oublier le GROUP BY et compter tout en bloc.

    3Question 2 — Chiffre d'affaires par pays

    La consigne

    Quel est le chiffre d'affaires total (commandes payées) par pays du client ?

    Première jointure : il faut relier commandes et clients, filtrer sur le statut, puis sommer. Le cœur du métier d'analyste.

    SELECT c.pays, SUM(o.montant) AS ca FROM commandes o JOIN clients c ON c.id = o.client_id WHERE o.statut = 'payee' GROUP BY c.pays ORDER BY ca DESC;
    • Une bonne réponse joint les deux tables, filtre sur 'payee' et somme le montant.
    • Erreur fréquente : oublier de filtrer les commandes annulées/en attente.

    4Question 3 — Top 5 des produits les plus vendus

    La consigne

    Quels sont les 5 produits les plus vendus en quantité ?

    Jointure + agrégation + tri + limite : la requête analytique typique. Elle teste l'enchaînement des opérations.

    SELECT p.nom, SUM(o.quantite) AS total_vendu FROM commandes o JOIN produits p ON p.id = o.produit_id GROUP BY p.nom ORDER BY total_vendu DESC LIMIT 5;
    • Une bonne réponse somme les quantités par produit, trie et limite à 5.
    • Erreur fréquente : trier sans agréger, ou compter les lignes au lieu des quantités.

    5Question 4 — Les clients qui n'ont jamais commandé

    La consigne

    Quels clients n'ont passé aucune commande ?

    La question qui sépare : elle demande une LEFT JOIN avec test sur NULL (ou NOT EXISTS). Beaucoup de juniors butent ici.

    SELECT c.id, c.nom FROM clients c LEFT JOIN commandes o ON o.client_id = c.id WHERE o.id IS NULL;
    • Une bonne réponse utilise une LEFT JOIN et garde les lignes sans commande (IS NULL), ou un NOT EXISTS.
    • Erreur fréquente : une INNER JOIN, qui exclut justement les clients recherchés.

    6Question 5 — Le panier moyen par mois

    La consigne

    Quel est le montant moyen d'une commande payée, mois par mois ?

    La synthèse : filtrer, extraire le mois d'une date et calculer une moyenne. Elle vérifie l'aisance avec les dates et les agrégats.

    SELECT DATE_TRUNC('month', o.date_commande) AS mois, AVG(o.montant) AS panier_moyen FROM commandes o WHERE o.statut = 'payee' GROUP BY mois ORDER BY mois;
    • Une bonne réponse groupe par mois (fonction de date) et utilise AVG sur le montant.
    • Erreur fréquente : confondre moyenne des montants et CA divisé « à la main » de façon erronée.

    Signal d'alerte : astuce : acceptez toute syntaxe de date correcte selon le moteur (DATE_TRUNC, EXTRACT, strftime…). Ce qui compte est le raisonnement, pas la fonction exacte.

    7Grille par niveau

    NiveauMaîtrise attendueSignal GONO-GO
    JuniorRéussit Q1 à Q3Filtre, agrège et joint correctementBute déjà sur une jointure simple
    ConfirméRéussit Q4 (LEFT JOIN / NULL)Gère l'absence de correspondanceUtilise une INNER JOIN pour Q4
    SeniorRéussit Q5 proprementÀ l'aise avec dates et agrégatsConfond moyenne et somme
    LeadExplique chaque choix simplementVulgarise sa démarche à un non-techniqueRépond juste sans savoir expliquer

    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