rank() over,dense_rank() over,row_number() over的区别

Dear 丶 2021-12-05 03:11 413阅读 0赞

row_number() over() 1 2 3 4 5 6

rank() over() 1 2 3 3 5 6

dense_rank() over() 1 2 3 3 4 5

1.rank() over:查出指定条件后的进行排名。特点是,加入是对学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占的名次。

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NodWJpbmd6aHVveHVl_size_16_color_FFFFFF_t_70

2.dense_rank() over:与ran() over的区别是,两名学生的成绩并列以后,下一位同学并不空出所占的名次。

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NodWJpbmd6aHVveHVl_size_16_color_FFFFFF_t_70 1

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

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NodWJpbmd6aHVveHVl_size_16_color_FFFFFF_t_70 2

4.使用rank() over的时候,空值是最大的,如果排序字段为null,可能造成null字段排在最前面,影响排序结果。可以这样:rank() over(partition by course order by score desc nulls last)来规避这个问题。

select name,subject,score,rank() over(partition by subject order by score desc nulls last) rankfrom student_score;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NodWJpbmd6aHVveHVl_size_16_color_FFFFFF_t_70 3

发表评论

表情:
评论列表 (有 0 条评论,413人围观)

还没有评论,来说两句吧...

相关阅读