Menu
Coddy logo textTech

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

Mö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.

challenge icon

Aufgabe

Einfach

Verfü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 = 1 in WHERE rn <= 3, um die Top 3 zu erhalten
  • Ersetzen Sie ROW_NUMBER() durch RANK(), 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
quiz iconTeste dich selbst

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