SQL Academy
Premium
Funktionsreferenz

RANK

Gibt den Rang einer Zeile in der Fensterpartition zurück, also ihren Platz in der Reihenfolge von ORDER BY.

MySQL 8.1
RANK() OVER ([PARTITION BY ...] [ORDER BY ...])

Parameter

PARTITION BYoptional
Spalten, nach denen die Zeilen in Partitionen aufgeteilt werden; die Ränge werden in jeder separat berechnet
ORDER BYoptional
Reihenfolge der Zeilen, die den Platz bestimmt; ohne sie haben alle Zeilen Rang 1

Rückgabewert

Ganze Zahl (BIGINT UNSIGNED), der Platz der Zeile; gleiche Werte teilen sich einen Platz, die folgenden Plätze werden übersprungen: 1, 2, 2, 4

Beispiele

Rang nach Status mit Lücken

MySQL 8.1
SELECT member_name,
	status,
	RANK() OVER (
		ORDER BY status
	) AS status_rank
FROM FamilyMembers;
member_namestatusstatus_rank
Lela Quinceydaughter1
Annie Quinceydaughter1
Wednesday Addamsdaughter1
Headley Quinceyfather4
Ernest Forrestfather4
Flavia Quinceymother6
Constance Forrestmother6
Andie Quinceyson8

Plätze nach Gehalt in Abteilungen

MySQL 8.1
SELECT department_id,
	name,
	salary,
	RANK() OVER (
		PARTITION BY department_id
		ORDER BY salary DESC
	) AS salary_rank
FROM employees;
department_idnamesalarysalary_rank
1Dmitry Sokolov2200001
1Anna Ivanova2100002
1Igor Petrov1950003
1Pavel Smirnov1800004
1Elena Kozlova1750005
2Irina Volkova2050001
2Olga Novikova2000002
2Maxim Morozov1600003
2Nikita Popov1600003
3Tatiana Lebedeva1700001

Details

Um die Zeilen mit den vorderen Plätzen auszuwählen, berechne den Rang in einer Unterabfrage und filtere in der äußeren Abfrage: In WHERE derselben Abfrage kannst du keine Fensterfunktionen verwenden. Anders als bei ROW_NUMBER bekommen Zeilen mit gleichen Werten denselben Platz, daher liefert die Bedingung «Rang = 1» alle Spitzenreiter.

Siehe auch

Wo du es lernst