Oracle自带功能强大的分析函数,刚接触了好几个,才知道原来写的一些SQL完全可以简化,相见恨晚呐!
下面将介绍几个排名的函数。
row_number()
rank()
dense_rank()
row_number可以通过over 根据某字段排序完之后进行组内(如果有partition by)排序。
rank()是排名的函数,该函数组内排序后会进行跳号,分数相同的作为并列。
dense_rank()该函数不会跳号,分数相同为并列第一,下一个是第二。
如有个分组(partition by)则可以实现组内排序功能,比如说一个成绩报告单,按科目的排序第一,第二,第三….就可以使用先over(partition by 课程字段 order by 课程字段 )
附录:看下面两张图慢慢消化吧
分组之后以分组字段排序,row_number()即使deptno相同也是不相同,注意