Oracle评级函数

原创 2012年03月26日 14:45:09

Oracle提供了一组评级函数,包括有rank().dense_rank(), cume_dist(),percent_rank(),ntile(n);

    其中rank()表示当前数值在结果集中的名次,如果有名次相同时,下一名次将留空,如第一行与第二行的数值相同,则这二行的rank()返回值均为1,而第三行的名次返回值则为3而非2;

dense_rank()rank()不同之处为,dense_rank()不留空,即如果第一行与第二行数值相同,则这二行返回值均为1,而第三行的名次值为2;

Cume_dist()返回当前名次在总名次中占的%分比,如果返回的结果集记录数为10,则第一行为1/10,第二行为2/10,第三行为3/10,最后一行的值一定为1;

Percent_rank()返回也是返回当前名次在总结果集中占的%分比,但该值从0开始计数,因此一个结果集为10的计算方法为:

第一行为0/10,第二行为1/(10-1),第三行为2/(10-1),最后一行值亦为1;

Ntile(n)即将结果集划分n,计算当前值在n片中的那一个范围片中,如果n等于4则每一片的值为0.25,根据percent_rank()计算出当前行的值,如果值<=0.25则返回值为1,如果>0.25 and <=0.25*2,则返回值为2,如果>0.25*2 and <=0.75则值为3,其它值均为4;

下面我们首先创建一个测试表:

      create table test_group_table(

            t_year number,

           t_month number,

           quantity number

     );

     然后插入相应的测试数据:

       insert into test_group_table values(2012,1,29);

       insert into test_group_table values(2012,1,39);

       insert into test_group_table values(2012,2,11);

       insert into test_group_table values(2012,3,12);

       insert into test_group_table values(2013,1,10);

       insert into test_group_table values(2013,2,20);

       insert into test_group_table values(2013,3,30);

       insert into test_group_table values(2013,4,40);

评级函数需要与over关键字相合使用,我们执行以下sql:

SELECT T_YEAR,
       T_MONTH,
       sum(quantity) qty,
       rank() over (order by sum(quantity)) r_qty,
       dense_rank() over (order by sum(quantity)) d_qty,
       cume_dist() over  (order by sum(quantity)) c_qty,
       percent_rank() over  (order by sum(quantity)) q_qty,
       ntile(4) over (order by sum(quantity)) nqty
  FROM TEST_REPORT_TABLE
  group by rollup(t_year,t_month);
 得到的返回结果集为:

      2012 4 20 1 1 0.111111111111111              0                         1
      2012 1 30 2 2 0.222222222222222              0.125                 1
      2012 2 43.5 3 3 0.333333333333333           0.25                   1
      2012 3 55.5 4 4 0.444444444444444           0.375                 2
      2012  149 5 5 0.555555555555556               0.5                     2
      2013 1 808 6 6 0.666666666666667             0.625                3
      2013 5 907.54 7 7 0.777777777777778        0.75                  3
      2013  1715.54 8 8 0.888888888888889        0.875                4
                         1864.54  9  9  1                                  1                        4

     上面结果集中2012及2013年的所有数值在一起参与了评级,如果想针对不同的年份进行评级,即2012和2013年分开进行评级,可以将类似的  rank() over (order by sum(quantity)) r_qty,改为  rank() over (partition by t_yearorder by sum(quantity)) r_qty,这样排序返回值将只在每个年份中进行排序,如果想将同一月份不同年份的记录放在一块,即1月份2012和2013年的数据紧跟放在一块,可以使用rank() over (partition by t_monthsum(quantity));

 

67.Oracle数据库SQL开发之 高级查询——使用假想评级与分布函数

67.Oracle数据库SQL开发之 高级查询——使用假想评级与分布函数 欢迎转载,转载请标明出处: 假想评级与分布函数可以计算一条新记录在表中的排名和百分比,而不用将其插入表中。 可以结合RANK...
  • notbaron
  • notbaron
  • 2015年11月15日 09:36
  • 30525

Oracle之评级函数

RANK():返回数据项在分组中的排名,在排名相等时会在名次中留下空位,造成排名不连续。DENSE_RANK():同样返回数据项在分组中排名,不过在排名相等时不会留下名位空位。CUME_DIST():...
  • qq_33879355
  • qq_33879355
  • 2017年09月01日 10:25
  • 58

中国打脸“三大国际信用评级霸权”硝烟再起

《世界是平的》的作者,纽约时报作家托马斯弗里德曼曾说:我们生活在两个超级大国之间,一个是美国,一个是穆迪,美国可以用炸弹摧毁一个国家,穆迪可以用评级毁灭一个国家。 国际三大主权信用评级机构,美国标准...
  • tuotiansudai
  • tuotiansudai
  • 2017年10月31日 16:54
  • 158

世界各国信用评级[来自维基百科]

标准普尔 标准普尔各国主权债券评级:[1][2] 绿色 - AAA 青绿色 - AA 浅蓝 - A 深蓝 - BBB 紫色 - BB 红 - B 灰 - 未评级 如果一国的级...
  • ns2250225
  • ns2250225
  • 2013年10月09日 12:48
  • 2089

oracle:分析函数(评级函数、窗口函数等)

1.评级函数: 用于等级、百分点、n分片等。 函数 说明 RANK() 返回数据项在分组中的排名,排名相等会在名次中留下空位 ...
  • jarth
  • jarth
  • 2016年09月29日 17:59
  • 177

论信贷企业信用评级与债券信用评级的关系

一、信贷企业信用评级与债券信用评级的概念及作用 信用评级,也称为资信评级,是由独立的信用评级机构对影响评级对象的诸多信用风险因素进行分析研究,就其偿还债务的能力及其偿债意愿进行综合评价,并且用简单明了...
  • mousever
  • mousever
  • 2016年08月16日 09:29
  • 1225

我国信用评级行业发展现状

面对我国不良资产现状,银监会日前也已经表示要扩大不良资产证券化范围,在上几节中,我们已经提到了关于信用评级在不良资产证券化中的作用和影响力,所以对于信用评级我们不仅仅要研究它的作用,更要了解现今评级行...
  • xueyuluochen
  • xueyuluochen
  • 2016年12月02日 15:21
  • 1377

程序员等级阶段衡量标准,你到了哪个阶段?

程序员也分等级阶段?那是怎么样的衡量标准呢?
  • junzi11
  • junzi11
  • 2017年05月23日 16:55
  • 1046

【项目评级】ArcBlock(ABT)-区块链基石网络

报告主旨 鉴于中国国内投资者缺乏相应的区块链项目资料,数字世界团队整理了全球已经完成的、正在进行的,以及宣布未来将区块链的项目评测资料,以标准化的评级报告形式呈现在国内加密数字货币投资者眼前,以...
  • hack289099734
  • hack289099734
  • 2018年01月07日 23:25
  • 171

Weiss Ratings公布加密货币评级结果

点击上方“蓝色字”可关注我们!暴走时评:美国的金融评级机构Weiss Ratings之前宣布将对加密货币进行评级的消息引来了各界关注。目前,该机构也按照约定公布了评级结果,对74种最流行的加密货币进行...
  • IJXR1A64JI53L
  • IJXR1A64JI53L
  • 2018年01月28日 00:00
  • 121
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle评级函数
举报原因:
原因补充:

(最多只允许输入30个字)