在以下查询中,我返回不同的结果,但无法弄清楚这两个函数是什么。
select firstname,gender,weight,height,
cume_dist() over (order by height) cd,
percent_rank() over (order by height) pr
from childstat order by height
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
小智 11
这两个值的计算方式不同 - 请查看这两个函数的手册:cume_dist和percent_rank
返回一组值内某个值的累积分布;即,分区值小于或等于当前行中的值的百分比。这表示窗口分区的窗口排序中当前行之前或与当前行同级的行数除以窗口分区中的总行数。返回值范围从 0 到 1。
返回小于当前行中的值的分区值的百分比,不包括最高值。返回值范围从 0 到 1,表示行相对排名,按此公式计算得出,其中排名是行排名,行是分区行数:(rank - 1) / (rows - 1)
在您的示例中,对于第一行,cume_dist 将返回 2/7,因为 7 行中有 2 个值 (15) 小于或等于当前行值 (15);percent_rank 将返回 0,因为 (1-1) / (7-1) = 0。
你问这些功能是做什么的?
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。