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;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;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.