Oracle中partitionby的使用方法讲解
Parttion by 关键字是Oracle中分析性函数,可以进行分组排序,
和row_number()、rank()、dense_rank()函数一起使用
--row_number() 顺序排序
select row_number() over (partition by class order by score desc) 排名 ,NO,score,class from A_TEST
--rank() 跳跃排序,如果有两个第一级别时,接下来是第三级别
select rank() over (partition by class order by score desc) 排名 ,NO,score,class from A_TEST
--dense_rank() 连续排序,如果有两个第一级别时,接下来是第二级
select dense_rank() over (partition by class order by score desc) 排名 ,NO,score,class from A_TEST
A_TEST
NO CLASS SCORE
1001 1 99
1002 2 98
1001 3 97
1004 1 98
1005 1 97
1006 1 99
1007 2 98
1008 3 97
执行结果
①select row_number() over (partition by class order by score desc) 排名 ,NO,score,class from A_TEST;
排名 NO SCORE CLASS
1 1001 99 1
2 1006 99 1
3 1004 98 1
4 1005 97 1
1 1002 98 2
2 1007 98 2
1 1008 97 3
2 1001 97 3
②select rank() over (partition by class order by score desc) 排名 ,NO,score,class from A_TEST;
排名 NO SCORE CLASS
1 1001 99 1
1 1006 99 1
3 1004 98 1
4 1005 97 1
1 1002 98 2
1 1007 98 2
1 1008 97 3
1 1001 97 3
③select dense_rank() over (partition by class order by score desc) 排名 ,NO,score,class from A_TEST;
排名 NO SCORE CLASS
1 1001 99 1
1 1006 99 1
2 1004 98 1
3 1005 97 1
1 1002 98 2
1 1007 98 2
1 1008 97 3
1 1001 97 3
看排名可以知道三种函数的差异。