Compter et filtrer les groupes
Trouver les groupes qui dépassent un seuil, notamment les clients ayant plus de N commandes
Compter et filtrer les groupes est une leçon Coding Interview Prep gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Coding Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Coding Interview Prep comprend 4 leçons au total.
La question de regroupement la plus fréquente
« Trouvez les clients ayant plus de N commandes » est le problème classique d'entretien sur GROUP BY. Les variantes sont très fréquentes : produits vendus plus de X fois, services comptant au moins Y employés, jours comptant plus de Z connexions.
Le schéma est toujours le même : regrouper, compter, puis filtrer les groupes avec HAVING.
Première étape : compter par groupe
Commencez par compter les lignes de chaque groupe. Regroupez avec GROUP BY selon la clé qui définit un « client » ou un « produit », puis appliquez COUNT(*).
Vous obtenez ainsi une ligne par groupe avec sa taille. Vous n'avez encore rien filtré : vous mesurez simplement chaque groupe.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id;Deuxième étape : filtrer avec HAVING
Ne conservez maintenant que les groupes qui atteignent le seuil. La condition porte sur un agrégat ; elle doit donc se trouver dans HAVING, et non dans WHERE.
Interprétez-la ainsi : « regroupez les commandes par client, puis ne gardez que les clients dont le nombre dépasse cinq ». C'est la réponse complète à la question classique.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;Compter les valeurs distinctes ou toutes les lignes
Faites attention à la formulation. « Les clients qui ont commandé plus de 3 produits différents » nécessite COUNT(DISTINCT product_id), et non COUNT(*).
COUNT(*)compte les lignes du groupe.COUNT(DISTINCT col)compte les valeurs uniques qui ne sont pas NULL.
Les recruteurs glissent « différents » ou « uniques » dans la question pour vérifier que vous pensez à DISTINCT.
SELECT customer_id, COUNT(DISTINCT product_id) AS distinct_products
FROM orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) > 3;Filtrer avec SUM plutôt qu'avec COUNT
La même structure s'applique aux sommes. « Les clients qui ont dépensé plus de 1000 au total » regroupe les données par client et filtre sur SUM(amount).
N'importe quel agrégat peut servir de condition HAVING : COUNT, SUM, AVG, MAX ou MIN. L'indicateur demandé dans la question vous indique quel agrégat utiliser pour le filtre.
SELECT customer_id, SUM(amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;Plusieurs conditions de regroupement
HAVING peut combiner des conditions avec AND/OR, y compris des agrégats différents. « Les clients ayant plus de 5 commandes AND une commande moyenne supérieure à 100 » tient dans une seule clause HAVING.
Chaque condition fait référence à son propre agrégat ; toutes sont évaluées après le regroupement. Cela montre que vous savez exprimer clairement des règles métier composées.
SELECT customer_id,
COUNT(*) AS orders,
AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5 AND AVG(amount) > 100;Combiner WHERE et HAVING
Vous devez souvent filtrer les lignes avant de les compter. « Parmi les commandes de cette année, les clients ayant plus de 5 commandes » utilise WHERE pour la date et HAVING pour le nombre de commandes.
WHERE réduit d'abord le nombre de lignes, puis le regroupement et le seuil de HAVING s'appliquent. Maîtriser les deux clauses dans une seule requête est un bon indicateur de niveau intermédiaire.
SELECT customer_id, COUNT(*) AS orders_this_year
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY customer_id
HAVING COUNT(*) > 5;Repérer les doublons
Une question très proche consiste à « trouver les adresses e-mail en double ». Utilisez GROUP BY sur la colonne qui devrait être unique et conservez les groupes dont le nombre est supérieur à un.
Ce modèle simple détecte les clés en double, les transactions répétées ou toute valeur qui apparaît plus souvent qu'elle ne le devrait. Les recruteurs le posent pour vérifier que vous considérez le regroupement comme un outil de déduplication.
SELECT email, COUNT(*) AS times_seen
FROM users
GROUP BY email
HAVING COUNT(*) > 1;Groupes correspondant exactement à un nombre
Les seuils ne sont pas toujours « supérieur à ». « Les clients ayant exactement une commande » utilise HAVING COUNT(*) = 1 ; « au moins 3 » utilise >= 3.
Écoutez le mot qui indique la limite dans l’énoncé : « plus de », « au moins », « exactement », « moins de ». Chacun correspond à un opérateur de comparaison différent, et les recruteurs évaluent cette précision.
-- One-time customers
SELECT customer_id, COUNT(*) AS orders
FROM orders
GROUP BY customer_id
HAVING COUNT(*) = 1;Renvoyer uniquement les clés
Parfois, l’énoncé demande uniquement les identifiants retenus, et non les décomptes, souvent pour alimenter une autre requête. Vous regroupez et filtrez toujours les données, mais vous sélectionnez uniquement la clé avec SELECT.
Vous pouvez ensuite englober cela dans une sous-requête avec IN ou dans une jointure pour récupérer les enregistrements complets de ces clients. Maîtriser cette combinaison est un signe d’expérience avancée.
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;Guide pour les entretiens
Pour toute question sur des groupes qui atteignent un seuil, présentez oralement les quatre étapes suivantes : (1) identifier la clé de regroupement, (2) choisir la mesure agrégée, (3) déterminer l’opérateur de comparaison à partir de la formulation, (4) placer les filtres sur les lignes dans WHERE et le filtre sur l’agrégat dans HAVING.
Ce modèle permet de résoudre toute la famille des problèmes de comptage et de filtrage.
Vérification rapide
Choisissez la requête correcte pour l’énoncé.
Récapitulatif
Schéma : regrouper selon la clé, agréger, puis filtrer les groupes avec HAVING. Cela permet de résoudre les problèmes de « plus de N commandes », de clients qui dépensent le plus, de doublons et de clients n’ayant commandé qu’une seule fois.
- Utilisez
COUNT(*)pour les lignes etCOUNT(DISTINCT col)pour les valeurs uniques. - Faites correspondre l’opérateur de comparaison à la formulation de l’énoncé.
- Placez les filtres sur les lignes dans WHERE et les filtres sur les agrégats dans HAVING.
- Sélectionnez uniquement la clé avec SELECT pour alimenter une sous-requête avec IN ou une jointure.
Questions Fréquemment Posées
La leçon « Compter et filtrer les groupes » est-elle gratuite ?
Oui — le texte complet de « Compter et filtrer les groupes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Coding Interview Prep, passe à CoddyKit PRO. Le cours Coding Interview Prep comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Compter et filtrer les groupes » ?
Trouver les groupes qui dépassent un seuil, notamment les clients ayant plus de N commandes Tu pratiques Coding Interview Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Coding Interview Prep ?
Aucune expérience préalable n'est requise. Coding Interview Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Compter et filtrer les groupes » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Coding Interview Prep ?
Oui. Chaque leçon Coding Interview Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- La règle GROUP BY pour les colonnes SELECT
- HAVING ou WHERE
- Regrouper selon plusieurs colonnes et expressions
- Compter et filtrer les groupes