知识大全 oraclerank()函数总结

Posted

篇首语:曾无好事来相访,赖尔高文一起予。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oraclerank()函数总结相关的知识,希望对你有一定的参考价值。

  首先 要了解rank在英语的意思 等级 也就是说这是一个给数据确定等级的函数

  以销售为例 有地区 年 月 销售员 销售额 记录这五个字段 我们可以按地区 年 月 销售额对销售员进行排序 这样对销售员来说就相当于有一个等级概念了 第一名就是销售最高的 如果我们要找出每个地区 年 月 销售额的前三名销售员 SQL如何写?

  Sql代码

  SELECT area_code YEAR MONTH saleroom saler

  RANK () OVER (PARTITION BY area_code year month ORDER BY area_code year month saleroom ) RANK

  FROM t_sale

  Sql代码

  SELECT

  RANK( SHENZHEN )  WITHIN GROUP

  (ORDER BY area_code year month saleroom) Rank

  FROM T_SALE

  上面这个SQL就可以搞定了 要注意的是 Rank()里的参数必须为常数 或常值表达式 里面参数的个数 类型也要和order by后字段的类型相对应

  上面就是Rank函数的两个用法 另外还有一个dense_rank() 它的用法和rank()一样 只是计算等级的方式不同 例如上面的

   用dense_rank() 就是

  其实现在Oracle对于rank和dense_rank已经支持合计功能 不过这次我仅仅使用了其分析功能 具体语法如下 RANK ( ) OVER ( [query_partition_clause] order_by_clause )

  下面给出一些来自网上的示例

  TABLE S (subject mark)

  数学

  语文

  数学

  数学

  数学

  语文

  语文

  语文

  现在我想要的结果是 每门科目的前 名的分数

  数学

  数学

  数学

  语文

  语文

  语文

  那么语句就这么写

  select * from (select rank() over(partition by subject order by mark desc) rk S * from S) T

  where T rk<= ;

  dense_rank与rank()用法相当 但是有一个区别 dence_rank在处理相同的等级时 等级的数值不会跳过 rank则跳过 row_number() 补充

  例如 表

  A B C

  a          liu          wang

  a          jin          shu

  a          cai          kai

  b          yang      du

  b          lin          ying

  b          yao        cai

  b          yang     

  例如 当rank时为

  select m a m b m c rank() over(partition by a order by b) liu from test m

  A          B             C          LIU

  a          cai          kai         

  a          jin           shu       

  a          liu           wang    

  b          lin           ying       

  b          yang      du          

  b          yang                

  b          yao        cai          

  而如果用dense_rank时为

  select m a m b m c dense_rank() over(partition by a order by b) liu from test m

  A          B             C          LIU

  a          cai          kai         

  a          jin           shu       

  a          liu           wang    

  b          lin           ying       

  b          yang      du          

  b          yang                

  b          yao        cai          

  而如果用row_number()时为

  select m a m b m c row_number() over(partition by a order by b) liu from test m

  A          B             C          LIU

  a          cai          kai         

  a          jin           shu       

  a          liu           wang    

  b          lin           ying       

  b          yang      du          

  b          yang                

  b          yao        cai          

  现在RANK 就是 有了这个字段 就很容易得到前三名的销售员了

cha138/Article/program/Oracle/201311/18955

相关参考

知识大全 110个Oracle常用函数的总结

总结归纳:110个Oracle常用函数的总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  /*

知识大全 PHP中时间和日期函数总结

PHP中时间和日期函数总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!PHP中所有函数都是UNI

知识大全 110个oracle常用函数总结(8)

  RATIO_TO_REPORT功能描述该函数计算expression/(sum(expression))的值它给出相对于总数的百分比即当前行对sum(expression)的贡献  SAMPLE下

知识大全 总结Java Web中几个函数的作用

总结JavaWeb中几个函数的作用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一Servle

知识大全 110个oracle常用函数总结(1)

  ASCII  返回与指定的字符对应的十进制数;  SQL>selectascii(A)Aascii(a)aascii()zeroascii()spacefromdual;  AAZEROSP

知识大全 110个oracle常用函数总结(2)

  返回一个数字反余弦值  SQL>selectcosh()fromdual;  COSH()      EXP  返回一个数字e的n次方根  SQL>selectexp()exp()fr

知识大全 基于php常用函数总结(数组,字符串,时间,文件操作)

  数组:【重点】implode(分隔arr)把数组值数据按指定字符连接起来例如$arr=array();$str=implode($arr);explode([分隔]arr)按指定规则对一个字符串进

知识大全 php获取url参数程序代码总结

  parse_url函数  我们先来了解一下parse_url函数官方解决  说明  mixedparse_url(string$url[int$ponent=])  本函数解析一个URL并返回一个

知识大全 php遍历数组 list foreach each方法总结

在php中可以用来遍历数组的函数有很多如有for语句listeachforeach这四个函数这也是在php中遍历数组的几个主要的函数下面我来给大家介绍 foreach遍历数组我们在运用数组时

知识大全 c#中Split函数的使用

c#中Split函数的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!今天用到了这个函数稍微总结