ROW_NUMBER
Nummeriert die Zeilen einer Fensterpartition in der Reihenfolge von ORDER BY, beginnend mit 1.
MySQL 8.1
ROW_NUMBER() OVER ([PARTITION BY ...] [ORDER BY ...])Parameter
- PARTITION BYoptional
- Spalten, nach denen die Zeilen in Partitionen aufgeteilt werden; die Nummerierung beginnt in jeder neu
- ORDER BYoptional
- Reihenfolge, in der die Zeilen nummeriert werden; ohne sie werden die Zeilen in beliebiger Reihenfolge nummeriert
Rückgabewert
Ganze Zahl (BIGINT UNSIGNED) von 1 bis zur Anzahl der Zeilen in der Partition
Beispiele
Zeilennummern nach Status
MySQL 8.1
SELECT member_name,
status,
ROW_NUMBER() OVER (
ORDER BY status
) AS row_num
FROM FamilyMembers;Nummerierung innerhalb jedes Status
MySQL 8.1
SELECT member_name,
status,
birthday,
ROW_NUMBER() OVER (
PARTITION BY status
ORDER BY birthday
) AS num_in_status
FROM FamilyMembers;Details
Zeilen mit gleichen Werten in ORDER BY bekommen trotzdem verschiedene Nummern in beliebiger Reihenfolge. Eine Fensterfunktion kannst du nicht in WHERE verwenden: Um zum Beispiel die erste Zeile jeder Partition zu behalten, berechne die Nummer in einer Unterabfrage und filtere in der äußeren Abfrage.