SQL Academy
Premium
Funktionsreferenz

PERCENT_RANK

Gibt den relativen Rang einer Zeile in der Fensterpartition zurück, also den Anteil der Zeilen, die vor ihr stehen.

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

Parameter

PARTITION BYoptional
Spalten, nach denen die Zeilen in Partitionen aufgeteilt werden; der Anteil wird in jeder separat berechnet
ORDER BYoptional
Reihenfolge der Zeilen, die den Platz bestimmt; ohne sie bekommen alle Zeilen 0

Rückgabewert

Gleitkommazahl (DOUBLE) von 0 bis 1

Beispiele

Anteil nach Geburtsdatum

MySQL 8.1
SELECT member_name,
	birthday,
	RANK() OVER (
		ORDER BY birthday
	) AS birthday_rank,
	PERCENT_RANK() OVER (
		ORDER BY birthday
	) AS birthday_percent_rank
FROM FamilyMembers;
member_namebirthdaybirthday_rankbirthday_percent_rank
Headley Quincey1960-05-1310
Ernest Forrest1961-09-1120.14285714285714285
Flavia Quincey1963-02-1630.2857142857142857
Constance Forrest1968-09-0640.42857142857142855
Andie Quincey1983-06-0550.5714285714285714
Lela Quincey1985-06-0760.7142857142857143
Annie Quincey1988-04-1070.8571428571428571
Wednesday Addams2005-01-1381

Position des Gehalts in der Abteilung

MySQL 8.1
SELECT department_id,
	name,
	salary,
	ROUND(
		PERCENT_RANK() OVER (
			PARTITION BY department_id
			ORDER BY salary
		),
		2
	) AS salary_percent_rank
FROM employees;
department_idnamesalarysalary_percent_rank
1Elena Kozlova1750000
1Pavel Smirnov1800000.25
1Igor Petrov1950000.5
1Anna Ivanova2100000.75
1Dmitry Sokolov2200001
2Maxim Morozov1600000
2Nikita Popov1600000
2Olga Novikova2000000.67
2Irina Volkova2050001
3Andrey Kozlov1400000

Details

Der Wert wird so berechnet: (RANK() - 1) / (Anzahl der Zeilen in der Partition - 1): Die erste Zeile bekommt 0, die letzte 1. Zeilen mit gleichen Werten in ORDER BY bekommen denselben Anteil, wie denselben Platz bei RANK. In einer Partition aus einer Zeile ist das Ergebnis 0.

Siehe auch