PERCENT_RANK (Lakehouse v1)
Retorna a classificação relativa de um valor dentro de um conjunto de valores. O valor resultante fica entre 0 e 1, inclusive. Observação: a primeira linha de qualquer conjunto tem PERCENT_RANK igual a 0.
Veja também: CUME_DIST
Sintaxe do Analyze
Seção intitulada “Sintaxe do Analyze”func.percent_rank().over(partition_by=[<columns>], order_by=[<columns>])Exemplos do Analyze
Seção intitulada “Exemplos do 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|Sintaxe SQL
Seção intitulada “Sintaxe SQL”PERCENT_RANK() OVER ( PARTITION BY expr, ... ORDER BY expr [ASC | DESC], ...)Exemplos de SQL
Seção intitulada “Exemplos de SQL”Este exemplo recupera os nomes, as notas e os conceitos dos alunos, além das classificações percentuais (percent_rank) dentro de cada conceito, usando a função de janela 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|