PERCENT_RANK (Lakehouse v1)
Devuelve el rango relativo de un valor dado dentro de un conjunto de valores. El valor resultante está entre 0 y 1, ambos incluidos. Tenga en cuenta que la primera fila de cualquier conjunto tiene un PERCENT_RANK de 0.
Consulte también: CUME_DIST
Sintaxis de Analyze
Sección titulada «Sintaxis de Analyze»func.percent_rank().over(partition_by=[<columns>], order_by=[<columns>])Ejemplos de Analyze
Sección titulada «Ejemplos de 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|Sintaxis de SQL
Sección titulada «Sintaxis de SQL»PERCENT_RANK() OVER ( PARTITION BY expr, ... ORDER BY expr [ASC | DESC], ...)Ejemplos de SQL
Sección titulada «Ejemplos de SQL»Este ejemplo obtiene los nombres, las puntuaciones y las calificaciones de los estudiantes, junto con los rangos percentiles (percent_rank) dentro de cada calificación mediante la función de ventana 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|