Weiter zum Inhalt

SQL RANK(): So ordnest du Zeilen – mit Beispielen

Lerne, wie du die SQL-Funktion RANK() nutzt, um Zeilen zu bewerten, Gleichstände zu behandeln und sie mit DENSE_RANK() und ROW_NUMBER() zu vergleichen.
Aktualisiert 4. Mai 2026  · 6 Min. lesen

Beim Arbeiten mit SQL ist das Sortieren von Daten einfach, denn mit ORDER BY kannst du Zeilen schnell anordnen. Allein die Sortierung verrät dir jedoch nicht die Position jeder Zeile innerhalb dieser Reihenfolge. Genau hier hilft das Ranking. Statt nur sortierte Daten anzusehen, willst du Zeilen oft anhand bestimmter Kriterien mit Positionen wie 1., 2. oder 3. versehen.

Die Funktion RANK() löst dieses Problem, indem sie jeder Zeile basierend auf der definierten Ordnung einen numerischen Rang zuweist. RANK() gehört zu den SQL-Fensterfunktionen, mit denen du Berechnungen über einen Zeilensatz hinweg durchführen kannst und trotzdem einzelne Zeilen zurückerhältst. 

In diesem Tutorial zeige ich dir die Syntax von RANK(), praktische Beispiele, wie Gleichstände gehandhabt werden und wie sich die Funktion von DENSE_RANK() und ROW_NUMBER() unterscheidet.

Wenn du neu in SQL bist, starte mit unserem Introduction to SQL Kurs oder dem Intermediate SQL Kurs, wenn du bereits etwas Erfahrung hast. 

Was ist die SQL-Funktion RANK()?

Die SQL-Funktion RANK() ist eine Fensterfunktion, die jeder Zeile basierend auf einer festgelegten Ordnung einen Rang zuweist. Das Ranking wird vollständig durch das ORDER BY innerhalb der Fensterfunktion bestimmt. So erhält jede Zeile gemäß der ORDER BY-Klausel eine Position wie 1, 2, 3 usw.

Beachte bei der Verwendung von RANK():

  • Zeilen mit demselben Wert (Gleichstände) erhalten denselben Rang.
  • Bei Gleichständen entstehen Lücken in der Rangfolge. Haben z. B. zwei Zeilen Rang 2, ist der nächste Rang 4 und nicht 3.

SQL RANK() Syntax

Die Grundsyntax von RANK() ist:

RANK() OVER (ORDER BY column)

Dabei gilt:

  • OVER-Klausel: Definiert das Fenster (den Zeilensatz), auf den die Funktion angewendet wird.

  • ORDER BY: Legt fest, wie das Ranking vergeben wird, z. B. von hoch nach niedrig.

  • PARTITION BY (optional): Teilt die Daten in Gruppen und bewertet Zeilen innerhalb jeder Gruppe separat.

Unten siehst du die Syntax von RANK() mit PARTITION BY:

RANK() OVER (PARTITION BY column1 ORDER BY column2)

Die SQL-Funktion RANK() wird von allen großen Datenbanksystemen unterstützt, darunter PostgreSQL, MySQL (8.0+), Microsoft SQL Server und Oracle Database. Die Syntax ist weitgehend konsistent, da sie Teil des ANSI-SQL-Standards ist.

Ein einfaches Beispiel für SQL RANK()

Nachdem du die Syntax von RANK() kennst, zeige ich dir ein einfaches Beispiel, wie die Funktion arbeitet.

Angenommen, du hast eine Tabelle employees mit den Gehaltsinformationen der Mitarbeitenden.

Employee table.

Mit der folgenden Abfrage bewertest du die Mitarbeitenden nach ihrem Gehalt.

-- Rank employees by salary
SELECT 
    name,
    salary,
    RANK() OVER (ORDER BY salary DESC) AS rank_position
FROM employees;

In dieser Abfrage werden die Zeilen nach Gehalt absteigend sortiert, das höchste Gehalt erhält also Rang 1. Haben zwei Zeilen dasselbe Gehalt, bekommen sie denselben Rang.

Using RANK() function in SQL.

Du siehst: Haben zwei Zeilen denselben Wert, erhalten sie denselben Rang.

Der nächste Rang wird dann übersprungen. SQL berücksichtigt den Gleichstand, indem der folgende Rang ausgelassen wird.

Ich empfehle dir unseren Kurs Introduction to SQL Server, um mehr über Gruppierung und Datenaggregation zu lernen.

SQL RANK() mit PARTITION BY

Wie bereits gelernt, ermöglicht PARTITION BY, Rankings innerhalb von Gruppen statt über den gesamten Datensatz zu berechnen.

Im folgenden Beispiel werden Mitarbeitende nach department gruppiert, und die Rangfolge beginnt in jeder Abteilung neu. Jede Gruppe hat also ihre eigene unabhängige Rangliste.

-- Rank employees within each department
SELECT 
    name,
    department,
    salary,
    RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;

Using SQL RANK() with PARTITION BY

An den Ergebnissen siehst du: In „Sales“ teilen sich Emily Johnson und Michael Brown Rang 1, und in „HR“ gilt das Gleiche für William Miller und Olivia Wilson.

SQL RANK() vs. DENSE_RANK() vs. ROW_NUMBER()

Beim Ranking in SQL kannst du RANK(), DENSE_RANK() oder ROW_NUMBER() verwenden. Die Funktionen ähneln sich, verhalten sich aber wie folgt:

  • RANK(): Gleichstände teilen sich denselben Rang, dadurch entstehen Lücken nach Gleichständen.

  • DENSE_RANK(): Gleichstände teilen sich denselben Rang, es gibt jedoch keine Lücken in der Reihenfolge.

  • ROW_NUMBER(): Jede Zeile erhält eine eindeutige Nummer ohne Gleichstände, auch wenn Werte identisch sind.

Um die Unterschiede greifbar zu machen, vergleichen wir sie nebeneinander mit dieser Abfrage:

-- Compare RANK() vs DENSE_RANK() vs ROW_NUMBER()
SELECT 
    name,
    salary,

    RANK() OVER (ORDER BY salary DESC) AS rank_val,          -- allows gaps after ties

    DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank1,  -- no gaps, consecutive ranks

    ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num      -- always unique sequence

FROM employees;

SQL RANK() vs. DENSE_RANK() vs. ROW_NUMBER()

Aus den Ergebnissen lässt sich ableiten:

  • Nutze RANK(), wenn die Position zählt und Lücken akzeptabel sind.

  • Nutze DENSE_RANK(), wenn du eine durchgehende Rangfolge ohne Lücken willst.

  • Nutze ROW_NUMBER(), wenn jede Zeile eine eindeutige Nummer braucht, z. B. für Paginierung.

Wann solltest du SQL RANK() verwenden?

Die Funktion RANK() ist besonders hilfreich, wenn du Daten ordnen und Gleichstände natürlich abbilden willst. Außerdem ist sie nützlich für folgende Anwendungsfälle:

  • Bestenlisten: Wenn du Spieler:innen oder Nutzende nach Scores ranken willst und Gleichstände zulassen möchtest.
  • Verkaufsleistung bewerten: Wenn du Top-Performer nach Umsatz identifizieren willst – auch bei identischen Ergebnissen.
  • Top-N-Werte ermitteln: Praktisch für Abfragen wie „Top 3 Gehälter“, insbesondere wenn Gleichstände einbezogen werden sollen.

Häufige Fehler mit SQL RANK()

Hier sind typische Fehler bei der Nutzung von RANK() und wie du sie vermeidest:

  • ORDER BY vergessen: Ohne ORDER BY gibt es keine definierte Logik, und die Ergebnisse können unerwartet sein.

  • Gleichstände falsch einschätzen: Als Einsteiger erwartest du vielleicht 1, 2, 2, 3 – RANK() erzeugt jedoch Lücken (1, 2, 2, 4).

  • RANK() verwenden, obwohl ROW_NUMBER() nötig ist: Wenn du eindeutige fortlaufende Werte brauchst, ist ROW_NUMBER() die bessere Wahl.

  • PARTITION BY nicht genutzt: Ohne Partitionierung wird global statt gruppenweise bewertet.

Best Practices für SQL RANK()

Damit deine Abfragen klar bleiben und die erwarteten Ergebnisse liefern, empfehle ich dir diese Best Practices für die Nutzung von RANK():

  • Immer eindeutige Sortierung angeben: Sei beim ORDER BY explizit, z. B. mit DESC, um zweideutige Rankings zu vermeiden.

  • Die passende Ranking-Funktion wählen: Nutze RANK(), DENSE_RANK() oder ROW_NUMBER() je nachdem, wie du Gleichstände behandeln willst.

  • Gleichstand-Szenarien testen: Prüfe vor dem Go-live, wie sich deine Daten bei Duplikaten verhalten.

  • Mit Filtern kombinieren: Da du RANK() nicht direkt in einer WHERE-Klausel verwenden kannst, kapsle die Ranking-Abfrage in einer Subquery oder einem CTE ein, wenn du „Top N“ filtern willst.

Fazit

RANK() ist ein nützliches Werkzeug für geordnete Vergleiche in SQL – besonders, wenn Ergebnisse reale Szenarien wie gleiche Werte widerspiegeln sollen. Zu verstehen, wie Gleichstände behandelt werden und warum Ränge sich wiederholen oder Zahlen übersprungen werden, ist entscheidend für eine saubere Analyse. Beherrschst du dieses Verhalten, weißt du auch, wann du Alternativen wie DENSE_RANK() und ROW_NUMBER() einsetzen solltest – passend zu deinem Use Case.

Nachdem du nun weißt, wie man Daten in SQL ranked, empfehle ich dir unseren Associate Data Analyst in SQL Lernpfad, wenn du als Datenanalyst:in durchstarten willst. Unser Kurs Reporting in SQL ist ebenfalls ideal, wenn du lernen willst, wie man professionelle Dashboards mit SQL erstellt.

Erhalte eine Top-SQL-Zertifizierung

Stelle deine SQL-Kenntnisse unter Beweis und bringe deine Datenkarriere voran.
Werde SQL-zertifiziert

Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Ich verfasse Artikel, die Datenwissenschaft und Analytik vereinfachen und leicht verständlich und zugänglich machen.

SQL RANK() FAQs

Worin unterscheidet sich RANK() von ORDER BY?

ORDER BY sortiert nur Zeilen, während RANK() nach dem Sortieren jeder Zeile eine numerische Position zuweist.

Warum gibt es Lücken in den RANK()-Ergebnissen?

In den Ergebnissen von RANK() können Lücken entstehen, weil bei Gleichständen mehrere Zeilen denselben Rang erhalten und der nächste Rang dadurch übersprungen wird.

Was ist der Unterschied zwischen RANK() und DENSE_RANK()?

RANK() erzeugt nach Gleichständen Lücken, während DENSE_RANK() aufeinanderfolgende Ränge ohne Lücken vergibt.

Was ist der Unterschied zwischen RANK() und ROW_NUMBER()?

RANK() erlaubt Gleichstände, während ROW_NUMBER() jeder Zeile unabhängig von Duplikaten eine eindeutige Nummer zuweist.

Wird RANK() in allen Datenbanken unterstützt?

Die meisten modernen Datenbanken unterstützen RANK(), darunter PostgreSQL, MySQL (8.0+), Microsoft SQL Server und Oracle Database.

Themen

Lerne SQL mit DataCamp

Kurs

Datenbearbeitung in SQL

4 Std.
319.8K
Lerne, mit komplexen SQL-Abfragen diverse Data-Science-Aufgaben zu lösen und Datensätze für Analysen in PostgreSQL vorzubereiten.
Details anzeigenRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Tutorial

Python range()-Funktion Tutorial

Lerne anhand von Beispielen die Python-Funktion range() und ihre Möglichkeiten kennen.
Aditya Sharma's photo

Aditya Sharma

Tutorial

Python-Methode list() mit Beispielen erklärt

Lerne, wie du mit der Python-Funktion index() die Position von Elementen in Listen findest.
Sejal Jaiswal's photo

Sejal Jaiswal

Tutorial

Python-Arrays

Python-Arrays mit Code-Beispielen. Lerne noch heute, wie du mit Python NumPy Arrays erstellen und ausdrucken kannst!
DataCamp Team's photo

DataCamp Team

Tutorial

Wie man in Python auf 2 Dezimalstellen rundet

Lerne, wie du in Python eine Zahl auf zwei Dezimalstellen rundest, um die Genauigkeit zu verbessern, indem du Techniken wie round(), format() und String-Formatierungstechniken verwendest.
Allan Ouko's photo

Allan Ouko

Tutorial

Wie sortiert man ein Wörterbuch in Python nach Werten?

Lerne effiziente Methoden, um ein Wörterbuch in Python nach Werten zu sortieren. Lerne, wie du Sachen aufsteigend oder absteigend sortieren kannst, und hol dir ein paar coole Tipps zum Sortieren von Schlüsseln.
Neetika Khandelwal's photo

Neetika Khandelwal

Tutorial

Python-Listenfunktionen und -Methoden – Tutorial und Beispiele

Lerne die Funktionen und Methoden von Python-Listen kennen. Schau dir jetzt die Code-Beispiele für list() und andere Python-Funktionen und -Methoden an!
Abid Ali Awan's photo

Abid Ali Awan

Mehr anzeigenMehr anzeigen