当前位置:   article > 正文

oracle的rank over,Oracle中rank() over,dense_rank() over,row_number() over的区别

oracle rank() over 和row_number() over

1.rank() over:

Rank() over 用于指定条件后的进行排名.特点是对指定栏位的排名可以使用本函数,因为,如果出现两个相同的值,它会将其分为一组,同时将下一个栏位所占名次空出来

使用方法:rank() over(partition by 分组栏位名 order by 排序栏位名 desc)

例:

select name,subject,score,rank() over(partition by subject  order by score  desc) rank from student_score;

0ebdf3779f87

2.dense_rank() over:

dense_rank() over 与 rank() over的区别:前者并不会空出所占栏位数(也就是两个数值同用一个栏位数,那么下一个不同数值将占用前一个数值的栏位数),后者继续依照栏位数往下依次排列(栏位虽然并列,但是并列后的栏位会空出)

使用方法:dense_rank() over(partition by 分组栏位名 order by 排序栏位名 desc)

例:

select name,subject,score,dense_rank() over(partition by subject order by score desc) rankfrom student_score;

0ebdf3779f87

3.row_number() over:

row_number() over这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排列

使用方法:row_number() over(partition by 分组栏位名 order by 排序栏位名 desc)

例:

select name,subject,score,row_number() over(partition by subject order by score desc) rankfrom student_score;

0ebdf3779f87

注意:使用rank() over时,假如数据中有" NULL"存在,那么NULL是最大的,可能会造成NULL字段排在最前面,影响排序结果.可以这样:rank() over(partition by course order by score desc nulls last)来规避这个问题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/240875
推荐阅读
相关标签
  

闽ICP备14008679号