ROW_NUMBER, RANK, DENSE_RANK
Nummerieren und ranken Sie Zeilen innerhalb von Partitionen und wählen Sie bei Gleichständen die passende Ranking-Funktion.
ROW_NUMBER, RANK, DENSE_RANK ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Drei Nummerierungsfunktionen
Drei Fensterfunktionen, die Zeilen innerhalb einer Partition nummerieren:
ROW_NUMBER()— 1, 2, 3, 4 (immer eindeutig)RANK()— 1, 2, 2, 4 (Gleichstände teilen sich den Rang, danach wird übersprungen)DENSE_RANK()— 1, 2, 2, 3 (Gleichstände teilen sich den Rang, ohne Lücken)
ROW_NUMBER
Vergibt innerhalb jeder Partition die Werte 1, 2, 3. Gleichstände werden beliebig aufgelöst — geben Sie für deterministische Ergebnisse einen Tie-Breaker in ORDER BY an:
SELECT id, user_id, total,
ROW_NUMBER() OVER (
PARTITION BY user_id ORDER BY total DESC, id
) AS rn
FROM orders;Top-N pro Gruppe
Die klassische Verwendung von ROW_NUMBER:
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY user_id ORDER BY total DESC
) AS rn
FROM orders
)
SELECT * FROM ranked WHERE rn <= 3;
-- Each user's top 3 orders.RANK
Zeilen mit demselben ORDER BY-Wert erhalten denselben Rang; der nächste unterschiedliche Wert überspringt die entsprechende Lücke:
-- totals: 100, 90, 90, 70
-- RANK: 1, 2, 2, 4 (skipped 3)
SELECT id, total,
RANK() OVER (ORDER BY total DESC) AS rk
FROM orders;DENSE_RANK
Wie RANK, aber ohne Lücken:
-- totals: 100, 90, 90, 70
-- DENSE: 1, 2, 2, 3
SELECT id, total,
DENSE_RANK() OVER (ORDER BY total DESC) AS dr
FROM orders;Die richtige Funktion auswählen
- Benötigen Sie eindeutige Nummern (z. B. für die Seitennavigation)?
ROW_NUMBER - Benötigen Sie eine Rangfolge mit traditionellen „übersprungenen Gleichständen“?
RANK - Benötigen Sie eine Rangfolge, bei der „Gleichstände denselben Rang teilen und der nächste Rang direkt folgt“?
DENSE_RANK
NTILE: N-Quantil-Buckets
NTILE(n) verteilt Zeilen auf n annähernd gleich große Buckets:
SELECT id, total,
NTILE(4) OVER (ORDER BY total) AS quartile
FROM orders;
-- 1 = bottom 25%, 4 = top 25%Duplikatzeilen entfernen
Verwenden Sie ROW_NUMBER + DELETE, um pro Duplikatgruppe eine Zeile zu behalten:
WITH dups AS (
SELECT id,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
FROM users
)
DELETE FROM users WHERE id IN (SELECT id FROM dups WHERE rn > 1);Seitennavigation pro Gruppe
Seite 2 von „den Bestellungen jedes Benutzers, 5 pro Seite“:
WITH r AS (
SELECT id, user_id,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rn
FROM orders
)
SELECT * FROM r WHERE rn BETWEEN 6 AND 10;PERCENT_RANK und CUME_DIST
Relative Position innerhalb der Partition:
SELECT id, total,
PERCENT_RANK() OVER (ORDER BY total) AS pct_rank,
CUME_DIST() OVER (ORDER BY total) AS cume_dist
FROM orders;Leistung
Nummerierungsfunktionen benötigen sortierte Eingaben innerhalb jeder Partition. Ein Index auf (partition_col, order_col) kann den Sortierschritt vermeiden.
Zusammenfassung
Drei Nummerierungsfunktionen decken die meisten Anforderungen ab.
- ROW_NUMBER für Eindeutigkeit
- RANK / DENSE_RANK für Rangfolgen mit Gleichständen
- NTILE für Quantil-Buckets
Kurze Überprüfung
Welche Ausgabe erzeugt DENSE_RANK bei den Werten 100, 90, 90, 70?
Häufig gestellte Fragen
Ist die Lektion „ROW_NUMBER, RANK, DENSE_RANK“ kostenlos?
Ja — der vollständige Text von „ROW_NUMBER, RANK, DENSE_RANK“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „ROW_NUMBER, RANK, DENSE_RANK“?
Nummerieren und ranken Sie Zeilen innerhalb von Partitionen und wählen Sie bei Gleichständen die passende Ranking-Funktion. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „ROW_NUMBER, RANK, DENSE_RANK“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- OVER, PARTITION BY, ORDER BY
- ROW_NUMBER, RANK, DENSE_RANK
- LAG, LEAD und Zeitreihenmuster
- Laufende Summen und gleitende Durchschnitte