Top-N pro Gruppe
Teil des Abschnitts Über die Grundlagen hinaus der SQL-Journey von Coddy — Lektion 23 von 27.
"Bestbezahlter Mitarbeiter pro Abteilung" ist das klassische Beispiel. Das Rezept ist immer ROW_NUMBER() mit einem PARTITION BY, dann 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öchten Sie die Top 3 anstelle der Top 1? Ändern Sie WHERE rn = 1 in WHERE rn <= 3. Möchten Sie Gleichstände an der Spitze zulassen? Tauschen Sie ROW_NUMBER() gegen RANK() aus.
Aufgabe
EinfachVerfügbare Tabellen und Spalten:
<strong>employees</strong>:<strong>id</strong>,<strong>name</strong>,<strong>department</strong>,<strong>salary</strong>
Geben Sie den am höchsten bezahlten Mitarbeiter in jeder department zurück. Geben Sie name, department und salary aus, sortiert nach department. Wenn zwei Mitarbeiter innerhalb einer Abteilung gleichauf an der Spitze liegen, geben Sie nur einen zurück: denjenigen mit der niedrigeren id.
Spickzettel
Um die obersten N Zeilen pro Gruppe zu erhalten, verwenden Sie ROW_NUMBER() mit PARTITION BY und filtern Sie anschließend:
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- Ändern Sie
WHERE rn = 1inWHERE rn <= 3, um die Top 3 zu erhalten - Ersetzen Sie
ROW_NUMBER()durchRANK(), um Gleichstände zu berücksichtigen
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 CASEPivotieren von Zeilen zu SpaltenZusammenfassung – Traffic-Quellen6Analyse-Rezepte
Top-N pro GruppeProzentualer Anteil am GesamtwertLaufende SummeNur eine Zeile pro Schlüssel behaltenZusammenfassung – Top-Kunden