oracle先分类再排序,Oracle 分级函数

1. rank()对表中的数据进行分级排序.

譬如有张学生成绩统计单的表STUDENT_RESULT

name number kemu fenshu

li 0113101 高数 90

zhang 0113098 高数 80

wang 0113077 高数 70

li 0113101 物理 80

zhang 0113098 物理 90

wang 0113077 物理 70

我如果要检索出表中高数的前两名和物理的前两名

那么可以通过使用 RANK()方法达到目的

--首先 通过kemu进行分类,然后按照fenshu降序排序

selectrank() over(partitionbykemuorderbyfenshudesc) rk,t.*fromstudent_result t

结果

rk name number kemu fenshu

1 li 0113101 高数 90

2 zhang 0113098 高数 80

3 wang 0113077 高数 70

1 zhang 0113098 物理 90

2 li 0113101 物理 80

3 wang 0113077 物理 70

--然后,检索出rk<=2的记录,即取出前两名

select*from(selectrank() over(partitionbykemuorderbyfenshudesc) rk,t.*fromstudent_result t)asywherey.rk<=2;

结果

rk name number kemu fenshu

1 li 0113101 高数 90

2 zhang 0113098 高数 80

1 zhang 0113098 物理 90

2 li 0113101 物理 80

dense_rank()和 rank()的用法完全相同,不同的是在出现分数相同的情况下

name number kemu fenshu

li 0113101 高数 80

zhang 0113098 高数 80

wang 0113077 高数 70

li 0113101 物理 80

zhang 0113098 物理 90

wang 0113077 物理 70

selectrank() over(orderbyfenshudesc) rk,t.*fromstudent_result t

的结果为

rk name number kemu fenshu

1 zhang 0113098 物理 90

2 li 0113101 高数 80

2 zhang 0113098 高数 80

2 li 0113101 物理 80

5 wang 0113077 高数 70

5 wang 0113077 物理 70

selectdense_rank() over(orderbyfenshudesc) rk,t.*fromstudent_result t

结果为

rk name number kemu fenshu

1 zhang 0113098 物理 90

2 li 0113101 高数 80

2 zhang 0113098 高数 80

2 li 0113101 物理 80

3 wang 0113077 高数 70

3 wang 0113077 物理 70

附 row_number()的使用

selectrow_number() over(orderbyfenshudesc) rk,t.*fromstudent_result t

rk name number kemu fenshu

1 zhang 0113098 物理 90

2 li 0113101 高数 80

3 zhang 0113098 高数 80

4 li 0113101 物理 80

5 wang 0113077 高数 70

6 wang 0113077 物理 70

fetch n rows only

取出当前记录的前多少行

selectrow_number() over(orderbyuser_no)fromuser_filesfetchfirst5rowsonly;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值