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