SQL开窗函数-排序:rank、rank_number、dense_rank
欧先生发表于:2023-01-16 15:44:51浏览:637次
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