SQL Academy
Premium
Funktionsreferenz

ROW_NUMBER

Nummeriert die Zeilen einer Fensterpartition in der Reihenfolge von ORDER BY, beginnend mit 1.

MySQL 8.4
ROW_NUMBER()

Rückgabewert

Ganze Zahl (BIGINT UNSIGNED) von 1 bis zur Anzahl der Zeilen in der Partition

Beispiele

Zeilennummern nach Status

MySQL 8.4
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.4
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. Ohne ORDER BY ist die Reihenfolge der Nummerierung nicht festgelegt. 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