此篇文章,小编主要是举例下面三种分析函数:
ROW_NUMBER() OVER()
RANK() OVER()
DENSE_RANK() OVER()
通过实例来理解学习它们,希望能够在后续的工作中使用上。
ROW_NUMBER() OVER():
返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。
RANK() OVER():
返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。
DENSE_RANK() OVER():
返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。
1.创建表
create table wx_student(
id number,
name varchar2(10),
score number,
cource number
)
2.插入数据
insert into wx_student(id,name,score,cource)values(1,'zhangsan',80,1);
insert into wx_student(id,name,score,cource)values(2,'lisi',60, 1);
insert into wx_student(id,name,score,cource)values(3,'wangwu',90, 1);
insert into wx_student(id,name,score,cource)values(4,'lisi',70, 2);
insert into wx_student(id,name,score,cource)values(5,'zhangsan',70, 2);
insert into wx_student(id,name,score,cource)values(6,'wangwu',66, 2);
3.使用上面罗列的三个分析函数查询,查看效果
3.1.ROW_NUMBER() OVER()
select name,
cource,
row_number() over(partition by cource order by score desc) as rank
from wx_student;
显示结果:
说明:不需要考虑是否并列,那怕根据条件查询出来的数值相同也会进行连续排名。
3.2.RANK() OVER()
select name,
cource,
rank() over(partition by cource order by score desc) as rank
from wx_student;
显示结果:
说明:遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。
3.3.DENSE_RANK() OVER()
select name,
cource,
dense_rank() over(partition by cource order by score desc) as rank
from wx_student;
显示结果:
说明:遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间不空排名,继续递增。