譬如有张学生成绩统计单的表STUDENT_RESULTname number kemu fenshuli 0113101 高数 90zhang 0113098 高数 80wang 0113077 高数 70li 0113101 物理 80zhang 0113098 物理 90wang 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 fenshu1 li 0113101 高数 902 zhang 0113098 高数 803 wang 0113077 高数 701 zhang 0113098 物理 902 li 0113101 物理 803 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 fenshu1 li 0113101 高数 902 zhang 0113098 高数 801 zhang 0113098 物理 902 li 0113101 物理 80dense_rank()和 rank()的用法完全相同,不同的是在出现分数相同的情况下如name number kemu fenshuli 0113101 高数 80zhang 0113098 高数 80wang 0113077 高数 70li 0113101 物理 80zhang 0113098 物理 90wang 0113077 物理 70select rank() over(order by fenshu desc) rk,t.* from student_result t的结果为rk name number kemu fenshu1 zhang 0113098 物理 902 li 0113101 高数 802 zhang 0113098 高数 802 li 0113101 物理 805 wang 0113077 高数 705 wang 0113077 物理 70而select dense_rank() over(order by fenshu desc) rk,t.* from student_result t结果为rk name number kemu fenshu1 zhang 0113098 物理 902 li 0113101 高数 802 zhang 0113098 高数 802 li 0113101 物理 803 wang 0113077 高数 703 wang 0113077 物理 70附 row_number()的使用select row_number() over(order by fenshu desc) rk,t.* from student_result trk name number kemu fenshu1 zhang 0113098 物理 902 li 0113101 高数 803 zhang 0113098 高数 804 li 0113101 物理 805 wang 0113077 高数 706 wang 0113077 物理 70fetch n rows only取出当前记录的前多少行如select row_number() over(order by user_no) from user_files fetch first 5 rows only;