SQL开窗函数-排序:rank、rank_number、dense_rank

1、注意:

partition by 相当于 group by 分组的作用,可不加;desc 表示倒序排序,默认是正序

2、RANK()

说明:在进行排序时,如果有相同位次,会赋予与上一个名次相同的名次,并将下一位进行+1排序。例如,有3条数据排在第1位,2条数据排在第二位时,排序为:1,1,1,4,4,6······

代码示例:对第一次月考班级成绩进行排名 rank() over(partition by *** order by *** desc)

select

        calss_name 班级名称

        ,student_name 学生姓名

        ,student_achievement 学生成绩

        ,rank() over(partition by calss_name order by student_achievement desc) rank

from 学生成绩信息表

where 考试类目 = '第一次月考'

结果示例:

        班级名称       学生姓名      学生成绩     rank

        大数据二班    常三飞           98              1

        大数据二班    常中新           98              1

        大数据二班    杨    夺           96              3

        大数据二班    欧明健           96              3

        大数据二班    郭志高           95              5

        大数据二班    李绍幸           92              6

3、DENSE_RANK()

说明:在进行排序时,如果有相同位次,会赋予与上一个名次相同的名次,并将下一位进行顺排。例如,有3条数据排在第1位,2条数据排在第二位时,排序为:1,1,1,2,2,3······

代码示例:对第一次月考班级成绩进行排名 dense_rank() over(partition by *** order by *** desc)

select

        calss_name 班级名称

        ,student_name 学生姓名

        ,student_achievement 学生成绩

        ,dense_rank() over(partition by calss_name order by student_achievement desc) d_rank

from 学生成绩信息表

where 考试类目 = '第一次月考'

结果示例:

        班级名称       学生姓名      学生成绩     d_rank

        大数据二班    常三飞           98              1

        大数据二班    常中新           98              1

        大数据二班    杨    夺           96              2

        大数据二班    欧明健           96              2

        大数据二班    郭志高           95              3

        大数据二班    李绍幸           92              4

4、RANK_NUMBER()

说明:在进行排序时,每一位都要不同的序号,即便数据相同,也会随机安排前后位次。例如,有3条数据排在第1位,2条数据排在第二位时,排序为:1,2,3,4,5,6······

代码示例:对第一次月考班级成绩进行排名 rank_number() over(partition by *** order by *** desc)

select

        calss_name 班级名称

        ,student_name 学生姓名

        ,student_achievement 学生成绩

        ,rank_number() over(partition by calss_name order by student_achievement desc) n_rank

from 学生成绩信息表

where 考试类目 = '第一次月考'

结果示例:

        班级名称       学生姓名      学生成绩     d_rank

        大数据二班    常三飞           98              1

        大数据二班    常中新           98              2

        大数据二班    杨    夺           96              3

        大数据二班    欧明健           96              4

        大数据二班    郭志高           95              5

        大数据二班    李绍幸           92              6

你可能感兴趣的:(sql,数据库)