Menu
Coddy logo textTech

Top-N per gruppo

Fa parte della sezione Oltre le basi del percorso SQL di Coddy. Lezione 23 di 27.

"Il dipendente più pagato per reparto" è l’esempio classico. La procedura è sempre ROW_NUMBER() con un PARTITION BY, poi filtra per la riga 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

Vuoi i primi 3 invece del primo? Modifica WHERE rn = 1 in WHERE rn <= 3. Vuoi consentire i pari merito al primo posto? Sostituisci ROW_NUMBER() con RANK().

challenge icon

Sfida

Facile

Tabelle e colonne disponibili:

  • employees: id, name, department, salary

Restituisci il dipendente con lo stipendio più alto in ogni department. Includi name, department e salary, ordinati per department. Se due dipendenti sono a pari merito al primo posto in un reparto, restituiscine solo uno: quello con l'id più basso.

Provalo tu

WITH ranked AS (
    -- ROW_NUMBER() OVER (PARTITION BY department ORDER BY ...)
)
SELECT name, department, salary FROM ranked WHERE rn = 1
ORDER BY department
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Oltre le basi

Esercitati da solo: Playground SQL