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;
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;
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;
网友评论