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 classique. La recette consiste toujours à utiliser ROW_NUMBER() avec PARTITION BY, puis à filtrer 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 les 3 premiers au lieu du premier ? 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 :
employees:id,name,department,salary
Retournez l’employé le mieux rémunéré dans chaque department. Affichez name, department et salary, dans l’ordre de department. Si deux employés sont à égalité pour le salaire le plus élevé dans un département, n’en retournez qu’un seul : celui dont l’id est le plus petit.
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 NULLNULLIF et IIFRécapitulatif - Présence3Agrégation conditionnelle
COUNT avec CASESUM avec CASEPivoter les lignes en colonnesRécapitulatif - Sources de trafic6Recettes d’analyse
Top-N par groupePourcentage du totalTotal cumuléGarder une ligne par cléRécapitulatif - Meilleurs clientsEntraînez-vous par vous-même : Playground SQL