跳到主要内容

PERCENT_RANK 窗口函数详解

一、一句话理解

PERCENT_RANK() 计算当前行在分组中的相对百分比位置,值范围 0 到 1。公式:(当前行排名 - 1) / (总行数 - 1)

二、函数语法

PERCENT_RANK() OVER (PARTITION BY 分组列 ORDER BY 排序列)

三、真实业务场景

场景:学生的成绩处于班级前百分之多少

SELECT class, student, score,
ROUND(PERCENT_RANK() OVER (PARTITION BY class ORDER BY score DESC) * 100, 1) AS top_pct
FROM scores;

示例:5 个学生,成绩 95,90,85,80,70

+-------+-------+------+
| score | rank | top_pct |
+-------+-------+------+
| 95 | 1 | 0% | ← 最高分,超过 0% 的人
| 90 | 2 | 25% | ← 超过 25% 的人
| 85 | 3 | 50% | ← 中位数
| 80 | 4 | 75% |
| 70 | 5 | 100% | ← 最低分,超过 100% 的人
+-------+-------+------+

PERCENT_RANK=0.5 表示"刚好排在中位数位置"。

四、与 CUME_DIST 的关键区别

PERCENT_RANKCUME_DIST
公式(rank-1) / (n-1)小于等于当前值的行数 / n
最小值0>0
最大值11

同一个 5 人成绩单,score=90(第2名):PERCENT_RANK=0.25,CUME_DIST=0.4(因为有2人得分>=90)。CUME_DIST 总是 >= PERCENT_RANK。

五、面试怎么考

  • "怎么算成绩在班级的前百分之多少?" → PERCENT_RANK
  • "PERCENT_RANK 和 CUME_DIST 的区别?" → 公式不同,CUME_DIST 把并列值都算进去

七、相关面试题

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看