PERCENT_RANK (Lakehouse v1)
Renvoie le rang relatif d’une valeur au sein d’un ensemble de valeurs. La valeur obtenue est comprise entre 0 et 1, bornes incluses. À noter : la première ligne de tout ensemble a un PERCENT_RANK de 0.
Voir aussi : CUME_DIST
Syntaxe Analyze
Section intitulée « Syntaxe Analyze »func.percent_rank().over(partition_by=[<columns>], order_by=[<columns>])Exemples Analyze
Section intitulée « Exemples Analyze »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|Syntaxe SQL
Section intitulée « Syntaxe SQL »PERCENT_RANK() OVER ( PARTITION BY expr, ... ORDER BY expr [ASC | DESC], ...)Exemples SQL
Section intitulée « Exemples SQL »Cet exemple récupère les noms, les notes et les niveaux des élèves, ainsi que leur rang centile (percent_rank) au sein de chaque niveau, à l’aide de la fonction de fenêtrage PERCENT_RANK().
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|