SQL ROW_NUMBER() verstehen: Syntax, Anwendungsfälle und Beispiele
Emily Parker
Product Engineer · Leapcell

Key Takeaways
ROW_NUMBER()
weist Zeilen innerhalb von Partitionen eindeutige, fortlaufende Nummern zu.- Es ist nützlich für Rangordnungen, Paginierung und Erkennung von Duplikaten.
- Die
ORDER BY
-Klausel ist in der Funktion erforderlich.
Die Funktion ROW_NUMBER()
ist eine leistungsstarke Window-Funktion in SQL, die Zeilen innerhalb eines Resultsets eine eindeutige, fortlaufende ganze Zahl zuweist. Diese Funktion ist besonders nützlich für Aufgaben wie Rangordnung, Paginierung und das Identifizieren von Duplikaten. Lassen Sie uns die Syntax, Verwendung und praktische Beispiele näher betrachten.
Syntax
ROW_NUMBER() OVER ( [PARTITION BY partition_expression] ORDER BY sort_expression [ASC | DESC] )
ROW_NUMBER()
: Die Funktion, die jeder Zeile eine fortlaufende ganze Zahl zuweist.OVER
: Definiert das Fenster oder die Menge von Zeilen, auf die sich die Funktion bezieht.PARTITION BY
(optional): Teilt das Resultset in Partitionen auf, auf die die FunktionROW_NUMBER()
unabhängig angewendet wird.ORDER BY
: Legt die Reihenfolge der Zeilen innerhalb jeder Partition fest.
Anwendungsfälle
1. Zuweisen von fortlaufenden Nummern zu Zeilen
So weisen Sie jeder Zeile in einem Resultset eine eindeutige Nummer zu:
SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num, first_name, last_name, salary FROM employees;
Diese Abfrage weist jedem Mitarbeiter eine Zeilennummer zu, sortiert nach absteigendem Gehalt.
2. Paginierung
Implementierung der Paginierung durch Abrufen einer Teilmenge von Zeilen:
WITH numbered_employees AS ( SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_num, first_name, last_name FROM employees ) SELECT * FROM numbered_employees WHERE row_num BETWEEN 11 AND 20;
Dies ruft die Zeilen 11 bis 20 aus der Tabelle employees
ab.
3. Identifizieren von Duplikaten
So finden Sie doppelte Datensätze basierend auf bestimmten Spalten:
WITH duplicates AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS row_num FROM users ) SELECT * FROM duplicates WHERE row_num > 1;
Dies identifiziert doppelte Benutzer basierend auf dem Feld email
.
4. Top N pro Gruppe
So finden Sie die Top N Einträge innerhalb jeder Gruppe:
WITH ranked_sales AS ( SELECT salesperson_id, region, sales_amount, ROW_NUMBER() OVER (PARTITION BY region ORDER BY sales_amount DESC) AS rank FROM sales ) SELECT * FROM ranked_sales WHERE rank <= 3;
Dies ruft die Top 3 Verkäufer in jeder Region basierend auf dem Umsatz ab.
Überlegungen
- Die
ORDER BY
-Klausel ist in derOVER
-Klausel fürROW_NUMBER()
obligatorisch. - Wenn
PARTITION BY
weggelassen wird, behandelt die Funktion das gesamte Resultset als eine einzige Partition. - Im Gegensatz zu
RANK()
undDENSE_RANK()
weistROW_NUMBER()
eindeutige fortlaufende Nummern ohne Lücken zu, selbst wenn es Bindungen in der Sortierspalte gibt.
Schlussfolgerung
Die Funktion ROW_NUMBER()
ist ein vielseitiges Werkzeug in SQL zum Zuweisen fortlaufender Nummern zu Zeilen, was Aufgaben wie Rangordnung, Paginierung und Duplikaterkennung erleichtert. Indem Sie diese Funktion verstehen und nutzen, können Sie komplexe Datenanalysen und -manipulationen auf einfache Weise durchführen.
FAQs
Es weist jeder Zeile basierend auf der angegebenen Reihenfolge eine eindeutige Ganzzahl zu.
Verwenden Sie es, um Zahlen zuzuweisen, und filtern Sie dann die Ergebnisse anhand der Zeilennummern.
Nein, es generiert immer aufeinanderfolgende Zahlen, unabhängig von Bindungen.
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Backend-Projekten.
Leapcell ist die Next-Gen Serverless Plattform für Webhosting, Async Tasks und Redis:
Multi-Language Support
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Deploy unlimited projects for free
- Zahlen Sie nur für die Nutzung – keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 $ unterstützen 6,94 Mio. Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und -protokollierung für verwertbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Auto-Scaling zur einfachen Bewältigung hoher Parallelität.
- Null Betriebsaufwand – konzentrieren Sie sich einfach auf den Aufbau.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ