Leçon 1 / 9 — Chapitre 1: Classer avec ROW_NUMBER, RANK, DENSE_RANK
Principe général : la différence avec GROUP BY
GROUP BY réduit vos lignes : N lignes deviennent un nombre de lignes égal au nombre de groupes distincts. Une fonction de fenêtrage (OVER(...)) fait l'inverse : elle calcule une valeur agrégée pour chaque ligne, sans en supprimer aucune.
SELECT equipe, COUNT(*) FROM employes GROUP BY equipe;
→ 2 lignes (une par équipe : ventes, support) — les 6 lignes individuelles ont disparu.
SELECT nom, equipe, COUNT(*) OVER (PARTITION BY equipe) AS taille_equipe
FROM employes;
→ 6 lignes (toutes les lignes d'origine, chacune enrichie d'une colonne taille_equipe).
À retenir :
GROUP BYregroupe et réduit le nombre de lignes du résultat.- Une fonction de fenêtrage (
OVER(...)) calcule une valeur par ligne, en gardant toutes les lignes d'origine. PARTITION BY(vu en détail leçon 3) restreint le calcul à un sous-ensemble de lignes, sans les fusionner.
À vous de jouer : comparez SELECT COUNT(*) FROM employes; et SELECT COUNT(*) OVER () FROM employes; — le second répète la même valeur sur chaque ligne.
À vous de jouer
À faireVoici une table employes :
employes
id | nom | equipe | anciennete
1 | Amara | ventes | 5
2 | Baptiste | ventes | 3
3 | Chloé | ventes | 3
4 | David | support | 7
5 | Elise | support | 2
6 | Farid | support | 7
Combien de lignes retourne SELECT equipe, COUNT(*) FROM employes GROUP BY equipe; ?
Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.
💡 Un nombre.
À vous de jouer
À faireVoici la même table employes (6 lignes). Combien de lignes retourne SELECT nom, equipe, COUNT(*) OVER (PARTITION BY equipe) AS taille_equipe FROM employes; ?
Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.
💡 Un nombre.