Exercice 30 / 60

CTE (WITH)

ConsigneAvec une CTE (WITH), classe les etudiants par note décroissante grâce à une fonction de rang (colonne nommée rang), puis n'affiche que les 3 premiers. Colonnes : nom, note, rang.

📖 Cours

Une cte (Common Table Expression) est une requête temporaire nommée, définie avec with avant la requête principale. Elle rend le code lisible.

Syntaxe

WITH nom_cte AS ( SELECT ...)SELECT * FROM nom_cte;
La CTE nomme une requête avant la requête principale, qui s'en sert ensuite comme d'une table ordinaire
La CTE nomme une requête avant la requête principale, qui s'en sert ensuite comme d'une table ordinaire

L'exemple qui suit se sert d'une fonction fenêtre, `rank() over (order BY ...)`. Le sujet complet est celui de la leçon 31, mais voici de quoi lire la ligne : `over (order BY prix desc)` demande de classer les lignes par prix décroissant, et `rank()` donne à chacune son numéro dans ce classement, sans regrouper ni supprimer de ligne. La colonne `rang` obtenue s'utilise ensuite comme n'importe quelle autre.

Exemple (table produits) :

WITH produits_classes AS ( SELECT nom, prix, RANK() OVER (ORDER BY prix DESC) AS rang FROM produits)SELECT * FROM produits_classes WHERE rang <= 3;-> les produits jusqu'au rang 3, plus lisible qu'une sous-requête imbriquée

Attention : rank() donne le même rang aux ex aequo, donc where rang <= 3 peut ramener plus de trois lignes (deux produits au même prix partagent le rang 3). Si tu en veux exactement trois, remplace rank() par row_number().

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →