
by
xx
orader
by
ZZ
desc)(分组排序序号)一般用来分组排序,与group
by
xx
order
by
ZZ
不同的是,它并不影响现有数据。比如:xx
zz1
21
31
42
22
6那么select
xx,zz,rank()over(partiton
by
xx
orader
by
ZZ
)
aa
from
table的结果为xx
zz
aa1
2
11
3
21
4
32
2
12
6
2partition
by可不写,这样就是全局排序,与order
by的排序结果相同,只是会存在序号还有其他用法,而且还有很多分析函数,这个可以上网找找,oracle分析函数,里面的例子好多,希望对你有帮助。
对于排序分析,应用的业务分析场景很多,例如所有销售大区的TOP5、按具体规则对数据集进行重新排序编号等,这些业务场景采用分析函数中排序函数,将很方便简单。
当前常用的排序类分析函数包括:row_number()、rank()、dense_rank(),这三个函数都可应用在排序场景中,但 又有些许不同。
特点:对分组后的排序结果进行递增编号,出现同值的也是递增处理。
rank()特点:按分组后的排序结果进行递增编号,如出现相同值则序号一致,但相邻出现的不同值序号将从rown+N开始(rown为前一个值的序号,N为前一个值相同的个数)。
dense_rank()特点:和rank()相似,按分组后的排序结果进行递增编号,如出现相同值则序号一致,但相邻出现的不同值序号将从rown+1开始。
1.row_number()应用于 不区分同值排序 的业务场景;
2.rank()&dense_rank()应用于 区分同值排序 的业务场景,至于用rank和dense_rank,则要看对同值排序后对序号递增方式的具体要求来定。
有了上述三个函数,对于日常公司分析大区销售排名、销售代表排名、部门费用项排名等等,将会非常的方便快捷。
楼主您好你需要对哪列排序,就可以加rank查询,结合over使用
一般需要排序 如要over中加入order by,(毕竟排名肯定是先理顺了再排名)
可能需要分组 需要over中加入partition by
rank的排序方式是 如果相同 则排序与上一个相同,下一个的序号会错开重复的数据
比如1,1,3,3,3,6,7,8,8,10。。。这种
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)