Menu
Coddy logo textTech

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 = 1

Vous 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().

challenge icon

Défi

Facile

Tables 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
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Playground SQL