PERCENT_RANK


1. percent_rank() over (order by .....)
返回某列或某列组合后每行的百分比排序
如下:
with cte as
(
  SELECT ROWNUM as n
  FROM DUAL 
  CONNECT BY ROWNUM <= 10
)
select n,percent_rank() over (order by n) as prk
from cte
;
结果如下:

 

图片

 

 PRK为每个N值的相对位置的百分比,该结果看起来会有些奇怪.10个数中的第2个数应该是排在20%才对,但却不是一个整数.

其实内部的逻辑为:

将n进行排序,注意第一位是0而不是1: 

 

图片

 然后用它们的序号除以最大的序号则得到上述的结果.

 

2.percent_rank(....) within group ....

 

用来求某一个数在一个集合中的对应位置百分比:

 

with cte as
(
  SELECT ROWNUM as n
  FROM DUAL 
  CONNECT BY ROWNUM <= 10
)
select percent_rank(8) within group (order by n) as prk
from cte
;

 

结果:

 PRK
0.7 

这个是如何得到的呢?

是将 (8-1)/10 和第一个例子有些区别.


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM