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;