暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQL小示例系列-分析函数

码蚁在线 2017-06-28
234

此篇文章,小编主要是举例下面三种分析函数:

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;

显示结果:

说明:遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间不空排名,继续递增。



文章转载自码蚁在线,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论