Top-N pro Gruppe
Teil des Abschnitts Über die Grundlagen hinaus der SQL-Journey von Coddy. Lektion 23 von 27.
„Höchstbezahlter Mitarbeiter pro Abteilung“ ist das klassische Beispiel. Das Rezept lautet immer ROW_NUMBER() mit einem PARTITION BY und anschließendem Filtern auf Zeile 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 = 1Möchtest du die Top 3 statt der Top 1? Ändere WHERE rn = 1 zu WHERE rn <= 3. Möchtest du Gleichstände an der Spitze zulassen? Ersetze ROW_NUMBER() durch RANK().
Aufgabe
EinfachVerfügbare Tabellen und Spalten:
employees:id,name,department,salary
Gib den bestbezahlten Mitarbeiter in jeder department zurück. Gib name, department und salary aus, sortiert nach department. Wenn zwei Mitarbeiter innerhalb einer Abteilung beim höchsten Gehalt gleichauf liegen, gib nur einen zurück: denjenigen mit der niedrigeren id.
Probier es selbst
WITH ranked AS (
-- ROW_NUMBER() OVER (PARTITION BY department ORDER BY ...)
)
SELECT name, department, salary FROM ranked WHERE rn = 1
ORDER BY department
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Über die Grundlagen hinaus
3Bedingte Aggregation
COUNT mit CASESUM mit CASEZeilen in Spalten umwandelnRückblick – Traffic-Quellen6Analyse-Rezepte
Top-N pro GruppeProzentualer Anteil an der GesamtsummeLaufende SummeEine Zeile pro Schlüssel behaltenRückblick – Top-KundenÜbe selbstständig: SQL-Playground