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;