SQL Academy
Premium
Funktionsreferenz

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;
member_namestatusrow_num
Lela Quinceydaughter1
Annie Quinceydaughter2
Wednesday Addamsdaughter3
Headley Quinceyfather4
Ernest Forrestfather5
Flavia Quinceymother6
Constance Forrestmother7
Andie Quinceyson8

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;
member_namestatusbirthdaynum_in_status
Lela Quinceydaughter1985-06-071
Annie Quinceydaughter1988-04-102
Wednesday Addamsdaughter2005-01-133
Headley Quinceyfather1960-05-131
Ernest Forrestfather1961-09-112
Flavia Quinceymother1963-02-161
Constance Forrestmother1968-09-062
Andie Quinceyson1983-06-051

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.

Siehe auch

Wo du es lernst