表及数据: Sql代码
- 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;
Sql代码
- 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;
Sql代码
- 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;
(1) 求出每门课程成绩排名前五名的同学的姓名,分数和课程名:
根据不同的排名方式有三种不同的sql写法:
1.1成绩相同的人排名相同,且排名是连续的。
Sql如下:Sql代码
- 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;
结果如下:
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
|
1.2成绩相同的人排名相同,且排名不是连续的。
Sql如下:Sql代码
- 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;
结果如下:
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 |
1.2成绩相同的人根据学号排序,排名是连续的。
Sql如下:Sql代码
- 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;
结果如下:
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
|
(2)求出每门课程成绩排名第三的同学的姓名,分数和课程名:
Sql如下:Sql代码
- 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;
结果如下:
STUDENT_NAME SCORE COURSE_NAME RN 王五 96 语文 3 王五 95 数学 3 王五 94 英语 3
|
Oracle学习笔记:SQL查询总结Oracle in与exists的选择相关资讯 Oracle教程
- Oracle中纯数字的varchar2类型和 (07/29/2015 07:20:43)
- Oracle教程:Oracle中查看DBLink密 (07/29/2015 07:16:55)
- [Oracle] SQL*Loader 详细使用教程 (08/11/2013 21:30:36)
| - Oracle教程:Oracle中kill死锁进程 (07/29/2015 07:18:28)
- Oracle教程:ORA-25153 临时表空间 (07/29/2015 07:13:37)
- Oracle教程之管理安全和资源 (04/08/2013 11:39:32)
|
本文评论 查看全部评论 (0)