Oracle的over() 函数使用
2011-09-23 17:32
567 查看
Oracle的over() 函数使用:
表及数据:
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">create table STUDENT
(
STUDENT_ID NUMBER not null,
STUDENT_NAME VARCHAR2(30) not null
)
;
alter table STUDENT
add primary key (STUDENT_ID);
prompt Loading STUDENT...
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (1, '张三');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (2, '李四');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (3, '王五');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (4, '马六');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (5, '孙七');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (6, '王八');
commit;</SPAN>
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">create table COURSE
(
COURSE_ID NUMBER not null,
COURSE_NAME VARCHAR2(30)
)
;
alter table COURSE
add primary key (COURSE_ID);
prompt Loading COURSE...
insert into COURSE (COURSE_ID, COURSE_NAME)
values (1, '语文');
insert into COURSE (COURSE_ID, COURSE_NAME)
values (2, '数学');
insert into COURSE (COURSE_ID, COURSE_NAME)
values (3, '英语');
commit;</SPAN>
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">create table SCORE
(
SCORE_ID NUMBER not null,
STUDENT_ID NUMBER,
COURSE_ID NUMBER,
SCORE NUMBER
)
;
alter table SCORE
add primary key (SCORE_ID);
prompt Loading SCORE...
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (1, 1, 1, 99);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (2, 1, 2, 98);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (3, 1, 3, 97);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (4, 2, 1, 99);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (5, 2, 2, 97);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (6, 2, 3, 98);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (7, 3, 1, 96);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (8, 3, 2, 95);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (9, 3, 3, 94);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (10, 4, 1, 93);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (11, 4, 2, 92);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (12, 4, 3, 91);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (13, 5, 1, 90);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (14, 5, 2, 89);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (15, 5, 3, 88);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (16, 6, 1, 87);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (17, 6, 2, 86);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (18, 6, 3, 85);
commit;</SPAN>
(1) 求出每门课程成绩排名前五名的同学的姓名,分数和课程名:
根据不同的排名方式有三种不同的sql写法:
1.1成绩相同的人排名相同,且排名是连续的。
Sql如下:
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
dense_rank() over(partition by c.COURSE_ID order by sc.SCORE desc) drank
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.drank < 6;</SPAN>
结果如下:
1.2成绩相同的人排名相同,且排名不是连续的。
Sql如下:
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large; COLOR: #000000">select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
rank() over(partition by c.COURSE_ID order by sc.SCORE desc) ranking
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.ranking < 6;</SPAN>
结果如下:
1.2成绩相同的人根据学号排序,排名是连续的。
Sql如下:
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
row_number() over(partition by c.COURSE_ID order by sc.SCORE desc, s.STUDENT_ID) rn
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.rn < 6;</SPAN>
结果如下:
(2)求出每门课程成绩排名第三的同学的姓名,分数和课程名:
Sql如下:
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
row_number() over(partition by c.COURSE_ID order by sc.SCORE desc, s.STUDENT_ID) rn
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.rn = 3;</SPAN>
结果如下:
表及数据:
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">create table STUDENT
(
STUDENT_ID NUMBER not null,
STUDENT_NAME VARCHAR2(30) not null
)
;
alter table STUDENT
add primary key (STUDENT_ID);
prompt Loading STUDENT...
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (1, '张三');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (2, '李四');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (3, '王五');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (4, '马六');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (5, '孙七');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (6, '王八');
commit;</SPAN>
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">create table COURSE
(
COURSE_ID NUMBER not null,
COURSE_NAME VARCHAR2(30)
)
;
alter table COURSE
add primary key (COURSE_ID);
prompt Loading COURSE...
insert into COURSE (COURSE_ID, COURSE_NAME)
values (1, '语文');
insert into COURSE (COURSE_ID, COURSE_NAME)
values (2, '数学');
insert into COURSE (COURSE_ID, COURSE_NAME)
values (3, '英语');
commit;</SPAN>
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">create table SCORE
(
SCORE_ID NUMBER not null,
STUDENT_ID NUMBER,
COURSE_ID NUMBER,
SCORE NUMBER
)
;
alter table SCORE
add primary key (SCORE_ID);
prompt Loading SCORE...
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (1, 1, 1, 99);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (2, 1, 2, 98);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (3, 1, 3, 97);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (4, 2, 1, 99);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (5, 2, 2, 97);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (6, 2, 3, 98);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (7, 3, 1, 96);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (8, 3, 2, 95);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (9, 3, 3, 94);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (10, 4, 1, 93);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (11, 4, 2, 92);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (12, 4, 3, 91);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (13, 5, 1, 90);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (14, 5, 2, 89);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (15, 5, 3, 88);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (16, 6, 1, 87);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (17, 6, 2, 86);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (18, 6, 3, 85);
commit;</SPAN>
(1) 求出每门课程成绩排名前五名的同学的姓名,分数和课程名:
根据不同的排名方式有三种不同的sql写法:
1.1成绩相同的人排名相同,且排名是连续的。
Sql如下:
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
dense_rank() over(partition by c.COURSE_ID order by sc.SCORE desc) drank
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.drank < 6;</SPAN>
结果如下:
STUDENT_NAME SCORE COURSE_NAME DRANK 张三 99 语文 1 李四 99 语文 1 王五 96 语文 2 马六 93 语文 3 孙七 90 语文 4 王八 87 语文 5 张三 98 数学 1 李四 97 数学 2 王五 95 数学 3 马六 92 数学 4 孙七 89 数学 5 李四 98 英语 1 张三 97 英语 2 王五 94 英语 3 马六 91 英语 4 孙七 88 英语 5 |
Sql如下:
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large; COLOR: #000000">select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
rank() over(partition by c.COURSE_ID order by sc.SCORE desc) ranking
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.ranking < 6;</SPAN>
结果如下:
STUDENT_NAME SCORE COURSE_NAME RANKING 张三 99 语文 1 李四 99 语文 1 王五 96 语文 3 马六 93 语文 4 孙七 90 语文 5 张三 98 数学 1 李四 97 数学 2 王五 95 数学 3 马六 92 数学 4 孙七 89 数学 5 李四 98 英语 1 张三 97 英语 2 王五 94 英语 3 马六 91 英语 4 孙七 88 英语 5 |
Sql如下:
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
row_number() over(partition by c.COURSE_ID order by sc.SCORE desc, s.STUDENT_ID) rn
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.rn < 6;</SPAN>
结果如下:
STUDENT_NAME SCORE COURSE_NAME RN 张三 99 语文 1 李四 99 语文 2 王五 96 语文 3 马六 93 语文 4 孙七 90 语文 5 张三 98 数学 1 李四 97 数学 2 王五 95 数学 3 马六 92 数学 4 孙七 89 数学 5 李四 98 英语 1 张三 97 英语 2 王五 94 英语 3 马六 91 英语 4 孙七 88 英语 5 |
Sql如下:
Sql代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/d7d454600f77758df47d870acbf00b9c.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201212/7a1e7afc0f2addbbdb746966b60e9e4a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201304/ffb34937a6f01b9d5cc633a2ffcdf885.gif)
<SPAN style="FONT-SIZE: large">select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
row_number() over(partition by c.COURSE_ID order by sc.SCORE desc, s.STUDENT_ID) rn
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.rn = 3;</SPAN>
结果如下:
STUDENT_NAME SCORE COURSE_NAME RN 王五 96 语文 3 王五 95 数学 3 王五 94 英语 3 |
相关文章推荐
- (2010-06-23)oracle分析函数row_number() over()使用
- oracle分析函数row_number() over()使用
- oracle over函数, wm_concat()字符串连接函数使用
- oracle sum()over函数的使用
- oracle分析函数row_number() over()使用
- oracle分析函数row_number() over()使用
- oracle分析函数over使用
- oracle分析函数row_number() over()使用
- oracle分析函数row_number() over()使用
- oracle sum()over函数的使用
- oracle sum()over函数的使用
- oracle累积求和分析函数sum over的使用
- oracle分析函数row_number() over()使用
- Oracle中Over函数使用
- Oracle row_number()over 函数的使用
- oracle分析函数row_number() over()使用
- oracle over() 函数 使用 实例
- oracle over()分析函数的使用实例
- ORACLE分析函数over(partition by...)中使用case when达到多重分组的效果
- Oracle下row_number()over函数使用备忘