在下面的查询中,我返回不同的结果,但无法弄清楚这两个函数是什么。
select firstname,gender,weight,height,
cume_dist() over (order by height) cd,
percent_rank() over (order by height) pr
from childstat order by height
FIRSTNAME GENDER WEIGHT HEIGHT CD PR
-------------------------------------------------- ------ ---------- ---------- ---------- ----------
buddy m 150 15 0.2857142857 0
Albert m 923 15 0.2857142857 0
rosemary f 123 35 0.4285714286 0.3333333333
lauren f 876 54 0.5714285714 0.5
furkar m 198 76 0.7142857143 0.6666666667
tommy m 167 78 0.8571428571 0.8333333333
simon m 256 87 1 1
答案 0 :(得分:4)
你在问这些功能是做什么的吗?
http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions035.htm
CUME_DIST计算一组值中值的累积分布。
在您的示例中,这意味着~29%的高度小于或等于好友。 ~57%的高度小于或等于劳伦。等
http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions109.htm
PERCENT_RANK类似于CUME_DIST(累积分布)函数。 PERCENT_RANK返回的值范围是0到1(包括0和1)。任何集合中的第一行的PERCENT_RANK为0.返回值为NUMBER。
答案 1 :(得分:1)
这两个值的计算方式不同-请查看有关这两个功能的手册:cume_dist和percent_rank
返回一组值在一个值中的累积分布;也就是说,分区值的百分比小于或等于当前行中的值。这表示窗口分区的窗口顺序中当前行之前或对等的行数除以窗口分区的总行数。返回值范围为0到1。
返回小于当前行中值的分区值的百分比(最高值除外)。返回值的范围是0到1,并表示根据该公式的结果计算的行相对等级,其中rank是行等级,而rows是分区行的数量: (排名-1)/(行-1)
在您的示例中,对于第一行,cume_dist将返回2/7,因为在7行中,有2个值(15)小于或等于当前行值(15)。 percent_rank将返回0,因为(1-1)/(7-1)= 0。