博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle中的Rank()函数(注明:本文是我对两篇博文进行整合而来的,下面有相关的链接)...
阅读量:5959 次
发布时间:2019-06-19

本文共 1576 字,大约阅读时间需要 5 分钟。

hot3.png

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

    具体语法为:

RANK() OVER ([query_partition_clause] order_by_clause)

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

SELECT AREA_CODE, YEAR, MONTH, SALEROOM, SALER, RANK() OVER(PARTITION BY AREA_CODE, YEAR, MONTH ORDER BY AREA_CODE, YEAR, MONTH, SALEROOM) SALE_RANK FROM SALE_TABLE;

   3、 新问题:销售额50000快在深圳,2007年5月能排到第几?

    sql代码为: 

SELECT RANK('BEIJING', 2007, 5, 50000) WITHIN GROUP (ORDER BY AREA_CODE, YEAR, MONTH, SALEROOM) SALE_RANK FROM SALE_TABLE;
     上面这个SQL就可以搞定了,要注意的是,Rank()里的参数必须为常数,或常量表达式,里面参数的个数、类型也要和order by后字段的类型相对应。

    4、下面用一些示例来进行训练

        1)TABLE : S (SUBJECT , MARK)

 SUBJECT  MARK
 数学  80
 语文      70
 数学  90
 数学  60
 数学  100
 语文  88
 语文  65
 语文  77

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

 SUBJECT  MARK
 数学  100
 数学  90
 数学  80
 语文  88
 语文  77
 语文  70

那么语句就可以这样写:

SELECT * FROM (SELECT A.SUBJECT, A.MARK, RANK() OVER(PARTITION BY SUBJECT ORDER BY SUBJECT, MARK DESC) MARK_RANK FROM S ) B WHERE B.MARK <= 3;

    5、DENSE_RANK()与RANK()用法相当,但是有一个区别:DENCE_RANK()在处理相同的等级时,等级的数组不会跳过。RANK()则跳过,例如表TEST:

 A
 a  liu  wang
 a  jin  shu
 a  cai  kai
 b  yang  du
 b  lin  ying
 b  yao  cai
 b  yang  gg

    例如:当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  1
 a  jin  shu  2
 a  liu  wang  3
 b  lin  ying  1
 b  yang  du  2
 b  yang  gg  2
 b  yao  cai  4

    如果使用DENSE_RANK()时,则为:

SELECT M.A, M.B, M.C, DENSE_RANK() OVER(PARTITION BY A ORDER BY B) LIU FROM TEST M;
 A LIU
 a  cai  kai 1
 a  jin  shu 2
 a  liu  wang 3
 b  bin  ying 1
 b  yang  du 2
 b  yang  gg 2
 b  yao  cai 3

 

参考链接:  

 

转载于:https://my.oschina.net/eillenme/blog/94654

你可能感兴趣的文章
2015年末必备前端工具集
查看>>
【Solidity】8. 杂项 - 深入理解Solidity
查看>>
关于在VS2005中编写DLL遇到 C4251 警告的解决办法
查看>>
Go语言大神亲述:历七劫方可成为程序员!
查看>>
CYQ.Data 轻量数据层之路 V4.5 版本发布[更好的使用体验,更优的缓存机制]
查看>>
NetApp针对其集群化方案“不值得升级”言论回击Wikibon
查看>>
QQ把游戏放进聊天框,这一点Facebook和微信都没做到
查看>>
在线匿名之父意欲终结“加密战争”
查看>>
WLAN市场销量逐步逼近有线网络
查看>>
SDN市场或许进入了慢热期
查看>>
教你使用Linux系统的Shell脚本维护Oracle
查看>>
力龙信息布局大数据领域
查看>>
大数据巧治职业差评师 生存空间锐减九成
查看>>
天津开展免费无线局域网建设
查看>>
提高信息安全意识对网络勒索病毒说不
查看>>
英国政府可能利用曼彻斯特自杀袭击要求互联网公司破解加密
查看>>
Mozilla 将大幅简化火狐浏览器的同步操作
查看>>
微软加大在 Edge/IE 浏览器上阻止 SHA-1 证书的力度
查看>>
龙芯将两款 CPU 核开源,这意味着什么?
查看>>
《51单片机应用开发从入门到精通》——导读
查看>>