cume_dist与percent_rank或之间的差异

问题描述 投票:0回答:3

在下面的查询中,我返回不同的结果,但无法弄清楚这两个函数是什么。

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 
sql oracle plsql
3个回答
11
投票

这两个值的计算方式不同 - 请查看这两个函数的手册:cume_distpercent_rank

  1. CUME_DIST() over_clause

返回一组值内某个值的累积分布;即,分区值小于或等于当前行中的值的百分比。这表示窗口分区的窗口排序中当前行之前或与当前行同级的行数除以窗口分区中的总行数。返回值范围从 0 到 1。

  1. PERCENT_RANK() over_clause

返回小于当前行值的分区值的百分比,不包括最高值。返回值范围从 0 到 1,表示行相对排名,按此公式计算得出,其中排名是行排名,行是分区行数: (排名 - 1)/(行 - 1)

在您的示例中,对于第一行,cume_dist 将返回 2/7,因为 7 行中有 2 个值 (15) 小于或等于当前行值 (15); %_rank 将返回 0,因为 (1-1) / (7-1) = 0。


5
投票

你是想问这些功能是做什么的吗?

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。


0
投票

(由坡生成)

1.PERCENT_RANK():

令 n 为结果集中的总行数。 令 r 为有序集中特定行的排名(从 1 开始)。 PERCENT_RANK() 使用以下公式以百分比形式计算行的相对位置: PERCENT_RANK = (r - 1) / (n - 1)

2.CUME_DIST():

令 n 为结果集中的总行数。 令 k 为值小于或等于当前行值的行数。 CUME_DIST() 使用以下公式计算值的累积分布(百分比): CUME_DIST = (k + 1) / n

© www.soinside.com 2019 - 2024. All rights reserved.