PaliSkill
SQL Intermédiaire

Leçon 7 / 9 — Chapitre 4: CTE et opérateurs ensemblistes

Réécrire une sous-requête complexe en CTE

Une CTE référencée plusieurs fois dans la requête principale évite de dupliquer sa définition — un avantage concret sur une sous-requête en FROM, qu'il faudrait réécrire intégralement à chaque usage.

WITH totaux AS (
  SELECT p.categorie, SUM(c.quantite) AS total_quantite
  FROM produits p
  JOIN commandes c ON p.id = c.produit_id
  GROUP BY p.categorie
)
SELECT categorie, total_quantite
FROM totaux
WHERE total_quantite > (SELECT AVG(total_quantite) FROM totaux);

La CTE totaux est utilisée deux fois : une fois dans le FROM principal, une fois à l'intérieur de la sous-requête scalaire du WHERE. Sans WITH, il faudrait écrire deux fois le même SELECT ... JOIN ... GROUP BY — au risque, en cas de modification future, d'oublier de mettre à jour l'une des deux copies.

Calcul : totaux donne papeterie = 5, hygiène = 9, boisson = 1 ; leur moyenne vaut (5+9+1)/3 = 5. Seule hygiène (9) dépasse strictement cette moyenne. Résultat final : 1 ligne, hygiene.

À retenir :

  • Une CTE référencée plusieurs fois dans la requête principale n'a besoin d'être écrite qu'une seule fois.
  • Sans CTE, un même calcul intermédiaire réutilisé deux fois doit être dupliqué mot pour mot — un risque d'incohérence si l'une des deux copies est modifiée sans l'autre.
  • Ce risque de duplication grandit avec la complexité du calcul intermédiaire : plus il est long, plus une CTE unique se justifie.

À vous de jouer : comptez combien de fois totaux apparaît dans cette requête, et combien de fois il faudrait répéter son contenu sans CTE.

🔒

Continuez ce module

Débloquez les leçons restantes ainsi que la certification finale.

2 500 XOF / 3,81 € / 4,15 $

Débloquez les 80 leçons restantes de ce module

Votre paiement est vérifié avant l'activation de l'accès