1.row_number() over (partition by col_n[,col_m ...] order by col_1[,col_2 ...])
作用:先按照col_n[,col_m ...进行分组,
再在每个分组中按照col_1[,col_2 ...]进行排序(升序),
最后返回排好序后的结果集
可以对每个分组内的行进行排序
利用这一特性可以:
①筛选重复数据
②筛选最新(最旧)数据
2.row_num 伪列
根据查询结果(取数据的时候)返回排序,因此只有有查询结果时才有row_num
①不能对row_num进行'>','>=',=(大于1)'的操作
②在使用ROWNUM时,只有当Order By的字段是主键时,查询结果才会先排序再计算ROWNUM;要注意使用order by时和rownum的先后顺序,会影响结果。
③可以取TOPN的数据
④可以进行分页查询操作
3.RANK() OVER(PARTITION BY col_1 ORDER BY col_2 DESC) 和 dense_rank()
rank返回并列数据并空出并列名次,dense_rank不空出并列名次
--rank: 1 2 2 4;dense_rank:1 2 2 3