RANK
Gibt den Rang einer Zeile in der Fensterpartition zurück, also ihren Platz in der Reihenfolge von ORDER BY.
MySQL 8.4
RANK()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.4
SELECT member_name,
status,
RANK() OVER (
ORDER BY status
) AS status_rank
FROM FamilyMembers;Plätze nach Gehalt in Abteilungen
MySQL 8.4
SELECT department_id,
name,
salary,
RANK() OVER (
PARTITION BY department_id
ORDER BY salary DESC
) AS salary_rank
FROM employees;Details
Ohne ORDER BY bekommt jede Zeile der Partition den Rang 1. 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.