PERCENT_RANK (Lakehouse v1)
Gibt den relativen Rang eines Werts innerhalb einer Wertemenge zurück. Der resultierende Wert liegt zwischen 0 und 1 (jeweils einschließlich). Bitte beachten Sie, dass die erste Zeile jeder Menge den PERCENT_RANK 0 hat.
Siehe auch: CUME_DIST
Analyze-Syntax
Abschnitt betitelt „Analyze-Syntax“func.percent_rank().over(partition_by=[<columns>], order_by=[<columns>])Analyze-Beispiele
Abschnitt betitelt „Analyze-Beispiele“table.name, table.score, table.grade, func.percent_rank().over(partition_by=[table.grade], order_by=table.score).alias('percent_rank')
name |score|grade|percent_rank |--------+-----+-----+------------------+Smith | 81|A | 0.0|Davies | 84|A |0.3333333333333333|Evans | 87|A |0.6666666666666666|Johnson | 100|A | 1.0|Taylor | 62|B | 0.0|Brown | 62|B | 0.0|Wilson | 72|B |0.6666666666666666|Thomas | 72|B |0.6666666666666666|Jones | 55|C | 0.0|Williams| 55|C | 0.0|SQL-Syntax
Abschnitt betitelt „SQL-Syntax“PERCENT_RANK() OVER ( PARTITION BY expr, ... ORDER BY expr [ASC | DESC], ...)SQL-Beispiele
Abschnitt betitelt „SQL-Beispiele“Dieses Beispiel ruft die Namen, Punktzahlen und Noten von Schülern sowie die Perzentilränge (percent_rank) innerhalb der jeweiligen Note mit der Fensterfunktion PERCENT_RANK() ab.
CREATE TABLE students ( name VARCHAR(20), score INT NOT NULL, grade CHAR(1) NOT NULL);
INSERT INTO students (name, score, grade)VALUES ('Smith', 81, 'A'), ('Jones', 55, 'C'), ('Williams', 55, 'C'), ('Taylor', 62, 'B'), ('Brown', 62, 'B'), ('Davies', 84, 'A'), ('Evans', 87, 'A'), ('Wilson', 72, 'B'), ('Thomas', 72, 'B'), ('Johnson', 100, 'A');
SELECT name, score, grade, PERCENT_RANK() OVER (PARTITION BY grade ORDER BY score) AS percent_rankFROM students;
name |score|grade|percent_rank |--------+-----+-----+------------------+Smith | 81|A | 0.0|Davies | 84|A |0.3333333333333333|Evans | 87|A |0.6666666666666666|Johnson | 100|A | 1.0|Taylor | 62|B | 0.0|Brown | 62|B | 0.0|Wilson | 72|B |0.6666666666666666|Thomas | 72|B |0.6666666666666666|Jones | 55|C | 0.0|Williams| 55|C | 0.0|