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 = 1Vuoi 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().
Sfida
FacileTabelle 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
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Oltre le basi
2Funzioni sulle stringhe
LENGTH, UPPER, LOWERSUBSTRINSTRREPLACE e TRIMConcatenare con ||Ripasso - Fatture3Aggregazione condizionale
COUNT con CASESUM con CASETrasformare le righe in colonneRiepilogo - Fonti di traffico6Ricette di analisi dei dati
Top-N per gruppoPercentuale del totaleTotale progressivoMantenere una riga per chiaveRiepilogo - Clienti principaliEsercitati da solo: Playground SQL