Leçon 1 / 9 — Chapitre 2: Isoler le top N par groupe
Cas d'usage concret : le membre le plus ancien de chaque équipe
Impossible d'écrire directement WHERE ROW_NUMBER() OVER (...) = 1 : dans l'ordre logique d'exécution d'une requête SQL, WHERE s'applique avant que les fonctions de fenêtrage soient calculées. Il faut donc passer par une sous-requête (ou une CTE) : calculer d'abord le rang, puis filtrer sur ce résultat.
SELECT nom, equipe, anciennete
FROM (
SELECT nom, equipe, anciennete,
ROW_NUMBER() OVER (PARTITION BY equipe ORDER BY anciennete DESC, id ASC) AS rang_equipe
FROM employes
) AS classement
WHERE rang_equipe = 1;
Cette requête isole le membre le plus ancien de chaque équipe : Amara pour ventes, David pour support.
À retenir :
- On ne peut pas filtrer directement sur le résultat d'une fonction de fenêtre dans un WHERE — il faut d'abord la calculer dans une sous-requête, puis filtrer sur ce résultat dans la requête englobante.
- Ce schéma (« calculer un rang par groupe, puis garder rang = 1 ») est le moyen standard d'isoler « le premier de chaque groupe » (le plus ancien, le plus vendu, le plus récent...).
À vous de jouer : modifiez rang_equipe = 1 en rang_equipe = 2 pour obtenir le deuxième plus ancien de chaque équipe.
À 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 nom, equipe, anciennete
FROM (
SELECT nom, equipe, anciennete,
ROW_NUMBER() OVER (PARTITION BY equipe ORDER BY anciennete DESC, id ASC) AS rang_equipe
FROM employes
) AS classement
WHERE rang_equipe = 1;
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
À faireDans le résultat de la même requête, quel est le nom du membre le plus ancien de l'équipe 'support' ?
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 prénom.