Top-N par groupe
Fait partie de la section Au-delà des bases du Journey SQL de Coddy — leçon 23 sur 27.
« L'employé le mieux payé par département » est l'exemple type. La recette est toujours ROW_NUMBER() avec un PARTITION BY, puis un filtrage sur la ligne 1.
WITH ranked AS (
SELECT name, department, salary,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
FROM employees
)
SELECT name, department, salary FROM ranked WHERE rn = 1Vous voulez le top 3 au lieu du top 1 ? Remplacez WHERE rn = 1 par WHERE rn <= 3. Vous voulez autoriser les ex æquo en tête ? Remplacez ROW_NUMBER() par RANK().
Défi
FacileTables et colonnes disponibles :
<strong>employees</strong>:<strong>id</strong>,<strong>name</strong>,<strong>department</strong>,<strong>salary</strong>
Retournez l'employé le mieux payé dans chaque department. Affichez name, department et salary, ordonnés par department. Si deux employés sont à égalité pour le salaire le plus élevé au sein d'un département, n'en retournez qu'un seul : celui avec l'id le plus bas.
Aide-mémoire
Pour obtenir les N premières lignes par groupe, utilisez ROW_NUMBER() avec PARTITION BY, puis filtrez :
WITH ranked AS (
SELECT name, department, salary,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
FROM employees
)
SELECT name, department, salary FROM ranked WHERE rn = 1- Remplacez
WHERE rn = 1parWHERE rn <= 3pour obtenir les 3 premiers - Remplacez
ROW_NUMBER()parRANK()pour autoriser les ex æquo
Essayez vous-même
WITH ranked AS (
-- ROW_NUMBER() OVER (PARTITION BY department ORDER BY ...)
)
SELECT name, department, salary FROM ranked WHERE rn = 1
ORDER BY department
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Au-delà des bases
1Logique conditionnelle
CASE WHENCASE dans ORDER BYCOALESCE pour les NULLsNULLIF et IIFRécapitulatif - Présences3Agrégation conditionnelle
COUNT avec CASESUM avec CASEPivoter des lignes en colonnesRécapitulatif - Sources de trafic6Recettes d'analyse
Top-N par groupePourcentage du totalTotal cumuléGarder une ligne par cléRécapitulatif - Meilleurs clients