Oracle中排名排序函数,ROW_NUMBER、RANK、DENSE_RANK、NTIL。
。。
1.ROW_NUMBER()
定义:ROW_NUMBER()函数作⽤就是将select查询到的数据进⾏排序,每⼀条数据加⼀个序号,他不能⽤做于学⽣成绩的排名,⼀般多⽤于分页查询,
⽐如查询前10个 查询10-100个学⽣。
实例:
1.1对学⽣成绩排序
这⾥number就是每个学⽣的序号 根据studentScore(分数)进⾏desc倒序
1.2获取第⼆个同学的成绩信息
这⾥⽤到的思想就是 分页查询的思想 在原sql外再套⼀层select
where t.number>=1 and t.number<=10 是不是就是获取前⼗个学⽣的成绩信息纳。
2.RANK()
定义:RANK()函数,顾名思义排名函数,可以对某⼀个字段进⾏排名,这⾥为什么和ROW_NUMBER()不⼀样那,ROW_NUMBER()是排序,当存在相同成绩的学⽣时,ROW_NUMBER()会依次进⾏排序,他们序号不相同,⽽Rank()则不⼀样出现相同的,他们的排名是⼀样的。下⾯看例⼦:
2.1对学⽣成绩进⾏排名
这⾥发现 ROW_NUMBER()和RANK()怎么⼀样?因为学⽣成绩都不⼀样所以排名和排序⼀样,下⾯改⼀下就会发现区别。
当出现两个学⽣成绩相同是⾥⾯出现变化。RANK()是 1 2 2,⽽ROW_NUMBER()则还是1 2 3,这就是RANK()和ROW_NUMBER()的区别了
3.DENSE_RANK()
定义:DENSE_RANK()函数也是排名函数,和RANK()功能相似,也是对字段进⾏排名,那它和RANK()到底有什么不同那?看例⼦:
实例:
rank函数怎么用
DENSE_RANK()密集的排名他和RANK()区别在于,排名的连续性,DENSE_RANK()排名是连续的,RANK()是跳跃的排名,所以⼀般情况下⽤的排名函数就是RANK()。
4.NTILE()
定义:NTILE()函数是将有序分区中的⾏分发到指定数⽬的组中,各个组有编号,编号从1开始,就像我们说的’分区’⼀样 ,分为⼏个区,⼀个区会有多少个。
实例:
这⾥查询了3次,第⼀次分为1个’区’ ,所以查询结果number全是1,第⼆次分为2个区,查询结果为 1 1 2,意思就是 第⼀个 ‘区’ 为1 1 两个编号的数据 ,第⼆个’区’只有2这个数据。