PERCENT_RANK(Lakehouse v1)
返回给定值在一组值中的相对排名,结果介于 0 和 1 之间(含)。请注意,任何集合中的第一行的 PERCENT_RANK 均为 0。
另请参阅:CUME_DIST
Analyze 语法
Section titled “Analyze 语法”func.percent_rank().over(partition_by=[<columns>], order_by=[<columns>])Analyze 示例
Section titled “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|SQL 语法
Section titled “SQL 语法”PERCENT_RANK() OVER ( PARTITION BY expr, ... ORDER BY expr [ASC | DESC], ...)SQL 示例
Section titled “SQL 示例”此示例使用 PERCENT_RANK() 窗口函数检索学生的姓名、分数、成绩等级,以及各成绩等级内的百分位排名(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|