ITPub博客

首页 > 数据库 > Oracle > DB分组排序(rank()对表中的数据进行分级排序)

DB分组排序(rank()对表中的数据进行分级排序)

原创 Oracle 作者:Deep_Bule 时间:2011-12-30 09:26:59 0 删除 编辑
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 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降序排序
select rank() over(partition by kemu order by fenshu desc) rk,t.* from student_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 (select rank() over(partition by kemu order by fenshu desc) rk,t.* from student_result t) as y where y.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

select rank() over(order by fenshu desc) rk,t.* from student_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
而select dense_rank() over(order by fenshu desc) rk,t.* from student_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()的使用

select row_number() over(order by fenshu desc) rk,t.* from student_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
取出当前记录的前多少行

如
select row_number() over(order by user_no) from user_files fetch first 5 rows only;


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26118480/viewspace-714202/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle array usage
下一篇: Report Builder:SRW包
请登录后发表评论 登录
全部评论

注册时间:2011-08-04

  • 博文量
    22
  • 访问量
    91642