码迷,mamicode.com
首页 > 数据库 > 详细

oracle分析函数

时间:2015-05-21 19:06:59      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

一、应用场景

  学生成绩表:

create table s_score
(
id number(16) primary key not null,
studentId number(16) not null,
subject varchar(32) not null,
test_time date default sysdate not null,
score number(16,2)
);
comment on table s_score is ‘学生分数‘;
comment on column s_score.id is ‘记录id‘;
comment on column s_score.studentId is ‘学生id‘;
comment on column s_score.subject is ‘科目‘;
comment on column s_score.test_time is ‘考试日期‘;
comment on column s_score.score is ‘得分‘;
create sequence s_score_seq
minvalue 1
maxvalue 9999999999999999999999999999
start with 1
increment by 1
cache 20;

  数据如下:

技术分享

insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,1,‘A‘,sysdate,90);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,2,‘A‘,sysdate,90);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,3,‘A‘,sysdate,90);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,4,‘A‘,sysdate,92);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,5,‘A‘,sysdate,87);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,6,‘A‘,sysdate,80);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,7,‘A‘,sysdate,89);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,1,‘B‘,sysdate,70);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,2,‘B‘,sysdate,50);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,3,‘B‘,sysdate,60);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,4,‘B‘,sysdate,90);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,5,‘B‘,sysdate,90);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,6,‘B‘,sysdate,40);
insert into s_score(id,studentid,subject,test_time,score)
values(s_score_seq.nextval,7,‘B‘,sysdate,80);

二、排序函数rank() over(order by column) | dense_rank() over(order by column)

1.不分组

讲解:

  排序有连续性:dense_rank() over(order by column),例如:1、2、2、3、3、3、4

  排序无连续性:rank() over(order by column),例如:1、2、2、4、4、4、4、8

查询A学科下所有学生成绩排序,从高到低:注:order by默认按照升序排列,desc是降序即从高到低

dense_rank()over(order by column):

select dense_rank() over(order by score desc) ranknum,s.studentid,s.score
from s_score s
where s.subject = ‘A‘;

  技术分享

rank()over(order by column):

select s.subject,rank() over(order by score desc) ranknum,s.studentid,s.score
from s_score s
where s.subject = ‘A‘;

  技术分享

2.分组排序

应用:查询A/B学科的前3名

select * from (
select s.subject,dense_rank() over(partition by s.subject order by s.score desc) ranknum,s.studentid,s.score
from s_score s)
where ranknum <= 3;

  技术分享

三、ROW_NUMBER

select s.subject,row_number() over(partition by s.subject order by s.score desc) ranknum,s.studentid,s.score
from s_score s;

  技术分享

 

oracle分析函数

标签:

原文地址:http://www.cnblogs.com/brolanda/p/4520266.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!