Coding Interview Prep · Leçon

Regrouper selon plusieurs colonnes et expressions

Clés de regroupement composites et regroupement selon des valeurs calculées

Leçon 3 sur 413 étapes

Regrouper selon plusieurs colonnes et expressions est une leçon Coding Interview Prep gratuite sur CoddyKit. Ceci est la leçon 3 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.

Au-delà d'une seule clé de regroupement

Les rapports réels regroupent rarement les données selon une seule colonne. Les recruteurs passent de « ventes par région » à « ventes par région et par mois » pour vérifier que vous comprenez les clés de regroupement composites.

La règle s'applique sans difficulté : ajouter des colonnes dans GROUP BY crée une ligne par combinaison distincte de ces colonnes.

Signification de plusieurs colonnes

Lorsque vous écrivez GROUP BY region, product, la clé de groupe est la paire (région, produit). Chaque paire unique devient une ligne de résultat.

  • 5 régions et 4 produits produisent jusqu'à 20 groupes.
  • Les combinaisons qui n'apparaissent jamais ne produisent aucune ligne.
  • L'ordre des colonnes dans GROUP BY ne modifie pas l'ensemble de résultats, mais peut parfois modifier le plan d'exécution.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY region, product;

Respectez toujours la règle de SELECT

La contrainte fondamentale reste inchangée. Toute colonne de SELECT qui n'est pas agrégée doit apparaître dans GROUP BY. Avec des clés composites, il vous suffit de toutes les énumérer.

Oublier une colonne dans un groupe à plusieurs clés est l'erreur la plus fréquente sous la pression d'un entretien. Faites correspondre exactement la liste GROUP BY aux colonnes non agrégées de SELECT.

-- Both region and product appear in GROUP BY
SELECT region, product,
       COUNT(*) AS orders,
       AVG(amount) AS avg_amount
FROM sales
GROUP BY region, product;

Regrouper selon une expression

Vous pouvez regrouper selon une valeur calculée, et pas uniquement selon une colonne brute. Une demande fréquente consiste à regrouper les ventes par mois, ce qui revient à regrouper selon une date tronquée ou dont on a extrait une partie.

L'expression de GROUP BY doit correspondre à celle de SELECT. Le moteur effectue le regroupement selon le résultat calculé.

SELECT DATE_TRUNC('month', order_date) AS month,
       SUM(amount) AS monthly_total
FROM sales
GROUP BY DATE_TRUNC('month', order_date);

Regrouper avec des catégories CASE

Il existe un modèle très puissant : utilisez une expression CASE dans le regroupement pour créer des catégories personnalisées. C'est ainsi que vous produisez des récapitulatifs de commandes « petites / moyennes / grandes » sans table de correspondance.

Les recruteurs apprécient cette approche, car elle vérifie à la fois la logique de CASE et le regroupement selon une valeur dérivée.

SELECT CASE
         WHEN amount < 50  THEN 'small'
         WHEN amount < 200 THEN 'medium'
         ELSE 'large'
       END AS bucket,
       COUNT(*) AS orders
FROM sales
GROUP BY CASE
         WHEN amount < 50  THEN 'small'
         WHEN amount < 200 THEN 'medium'
         ELSE 'large'
       END;

Regrouper selon la position de la colonne

De nombreux dialectes permettent de regrouper selon la position ordinale : GROUP BY 1, 2 signifie la première et la deuxième colonne de SELECT. C'est concis, mais fragile.

Les recruteurs peuvent l'accepter, mais notez le risque : réorganiser la liste SELECT modifie silencieusement le regroupement. Préférez des expressions explicites dans le code de production.

-- 1 = month expression, 2 = region
SELECT DATE_TRUNC('month', order_date) AS month,
       region, SUM(amount)
FROM sales
GROUP BY 1, 2;

Les NULL forment leur propre groupe

Piège lié à la gestion des NULL dans un regroupement : lorsqu'une colonne de regroupement contient des NULL, toutes les lignes contenant NULL sont regroupées en un seul groupe.

C'est différent des comparaisons d'égalité, où NULL n'est jamais égal à NULL. Pour le regroupement, les NULL sont considérés comme « identiques » et forment une seule catégorie. Les recruteurs aiment beaucoup cette contradiction apparente.

-- Rows with region IS NULL all land in one group
SELECT region, COUNT(*) AS orders
FROM sales
GROUP BY region;

GROUPING SETS pour plusieurs niveaux

Pour produire plusieurs niveaux de regroupement dans une seule requête, utilisez GROUPING SETS. Cette construction calcule chaque ensemble de clés indiqué et réunit les résultats.

C'est un indicateur de niveau intermédiaire à expérimenté : au lieu de trois requêtes distinctes suivies de UNION, une seule instruction renvoie ensemble les totaux par région, par produit et le total général.

SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS ((region), (product), ());

ROLLUP et CUBE

ROLLUP et CUBE sont des raccourcis pour les ensembles de regroupement courants. ROLLUP(region, product) fournit le regroupement région+produit, les sous-totaux par région et un total général, ce qui est idéal pour les rapports hiérarchiques.

CUBE génère toutes les combinaisons des colonnes indiquées. Les connaître permet de distinguer un candidat qui a conçu de véritables requêtes de rapports.

SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP (region, product);

Exemple détaillé : rapport mensuel par région

Combinez les idées : calculez le total et la moyenne des ventes par région et par mois, uniquement pour les commandes finalisées, puis triez le résultat pour en faciliter la lecture.

WHERE réduit d'abord le nombre de lignes, la clé composite regroupe selon la région et l'expression du mois, et ORDER BY organise le résultat. C'est une réponse complète typique lors d'un entretien d'analyste.

SELECT region,
       DATE_TRUNC('month', order_date) AS month,
       SUM(amount) AS total,
       AVG(amount) AS avg_order
FROM sales
WHERE status = 'completed'
GROUP BY region, DATE_TRUNC('month', order_date)
ORDER BY region, month;

Comment raisonner à voix haute

Pour toute question sur un regroupement composite, énoncez explicitement la clé : « Je regroupe selon la combinaison de X et Y, donc j'obtiens une ligne par paire distincte (X, Y). »

Vérifiez ensuite que chaque colonne non agrégée de SELECT figure dans cette clé, et mentionnez que les NULL sont regroupés en un seul groupe. Cette explication méthodique est appréciée lors des entretiens de niveau intermédiaire.

Vérification rapide

Raisonnez sur les clés de regroupement composites.

Récapitulatif

Clés composites : l'énumération de plusieurs colonnes produit une ligne par combinaison distincte ; chaque colonne non agrégée de SELECT doit faire partie de la clé.

  • Vous pouvez regrouper selon des expressions, des catégories CASE ou des positions ordinales, mais ces dernières sont fragiles.
  • Les NULL d'une colonne de regroupement sont regroupés en un seul groupe.
  • GROUPING SETS, ROLLUP et CUBE produisent plusieurs niveaux de regroupement dans une seule requête.
  • Placez les filtres de lignes dans WHERE avant le regroupement.
Gratuit pour commencer

Apprends Coding Interview Prep avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
90
Leçons
360

Questions Fréquemment Posées

La leçon « Regrouper selon plusieurs colonnes et expressions » est-elle gratuite ?

Oui — le texte complet de « Regrouper selon plusieurs colonnes et expressions » 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 « Regrouper selon plusieurs colonnes et expressions » ?

Clés de regroupement composites et regroupement selon des valeurs calculées 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 3 sur 4.

Combien de temps prend la leçon « Regrouper selon plusieurs colonnes et expressions » ?

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

  1. La règle GROUP BY pour les colonnes SELECT
  2. HAVING ou WHERE
  3. Regrouper selon plusieurs colonnes et expressions
  4. Compter et filtrer les groupes
← Retour à Coding Interview Prep