分别计算该课程(module)作业(cwMark)和考试(examMark)的平均分数,然后根据作业所占的比重(CWweight)和考试占的比重(Examweight)计算该门课程总共的平均分数(作业+考试的平均分),再把这个总共的平均分数列(但是这一项数据在原表中没有)显示出来。下面是表的数据:
Create table Student
(StudentID varchar2(6),
FirstName varchar2(20),
LastName varchar2(20),
CourseId varchar2(5),
DateEnrolled date,
DateWithdrawn date,
DateGraduated date,
constraint pk_st1 primary key(StudentID) );
Create table Registration
(StudentID varchar2(6), 
ModuleID varchar2(5), 
Year char(2), 
Semester char(1),  
CwMark number(2),
ExamMark number(2), 
constraint pk_r1 primary key(StudentID,ModuleID,Year,Semester),
constraint fk_st1 foreign key(StudentID) references Student(StudentID),
constraint fk_m3 foreign key(ModuleID) references Module(ModuleID)  );

Create table Module
(ModuleID varchar2(5), 
ModuleTitle varchar2(30),
CwWeight number(3),
ExamWeight number(3),
constraint pk_m1 primary key(ModuleID)     )
=======================================================================================================
--load Module with datainsert into Module values
('AR101','Architecture 1',50,50);insert into Module values
('AR201','Architecture 2',50,50);insert into Module values
('AR131','Architectural History 1',40,60);insert into Module values
('AR231','Architectural History 2',40,60);insert into Module values
('AR122','Technology and Environment',50,50);insert into Module values
('AR123','Architecture and Multimedia',100,0);insert into Module values
('FA101', 'Introduction to Painting',100,0);insert into Module values
('FA201', 'Painting 2',100,0);insert into Module values
('FA222', 'Life Drawing',100,0);insert into Module values
('FA111', 'History of Art 1',50,50);insert into Module values
('FA211', 'History of Art 2',50,50);insert into Module values
('FA122', 'Ceramics 1',100,0);insert into Module values
('SC101', 'Scultpture 1',100,0);
===================================================================================================
--load Student with data 
insert into Student values
('241234','Pablo','Picasso', 'FA', '01-sep-2004','','');insert into Student values
('242346','Claude', 'Monet', 'FA', '01-sep-2004','','01-jun-2006');insert into Student values
('245743','Rachel', 'Whiteread', 'SCU', '01-sep-2004','','');insert into Student values
('254988','Henry', 'Moore', 'SCU', '01-sep-2005','','01-jun-2006');insert into Student values
('256677','Barbara','Epstein', 'SCU', '01-sep-2005','','');insert into Student values
('258234','Edvard', 'Munch', 'FA', '01-sep-2005','','');insert into Student values
('259234','Salvador', 'Dali', 'FA', '01-sep-2005','','');insert into Student values
('263734','Beryl', 'Cook', 'FA', '01-sep-2006','','');insert into Student values
('265478','Alvar', 'Aalto', 'ARCH', '01-sep-2006','','');insert into Student values
('265676','Ieoh Ming', 'Pei', 'ARCH', '01-sep-2006','','');insert into Student values
('265479','Antonio', 'Gaudi', 'ARCH', '01-sep-2006','','');insert into Student values
('267489','Le', 'Corbusier', 'DCS', '01-sep-2006','','');insert into Student values
('268548','Aldo', 'Rossi', 'IA', '01-sep-2006','01-oct-2006','');insert into Student values
('269111','Damien', 'Hirst', '', '','','');insert into Student values
('269123','Andy', 'Warhol', 'DCS', '01-sep-2006','','');
--备注:如果是中文版的Oracle,要把日期改成01-9月-2006
======================================================================================================
--load Registration with data 
insert into Registration values
('241234','FA101','04','1',90,0);  insert into Registration values
('241234','FA111','04','1',45,35);  insert into Registration values
('241234','FA201','04','2',78,0);  insert into Registration values
('242346','FA101','04','1',76,0);  insert into Registration values
('242346','FA111','04','1',65,44); insert into Registration values
('242346','AR131','04','2',72,51);  insert into Registration values
('242346','AR231','04','2',56,61);  insert into Registration values
('245743','FA101','04','1',52,0);insert into Registration values
('245743','SC101','04','1',72,0);insert into Registration values
('254988','FA101','05','1',59,0);insert into Registration values
('254988','SC101','05','1',88,0);insert into Registration values
('254988','FA201','05','2',67,0);insert into Registration values
('256677','FA101','05','1',34,0);insert into Registration values
('256677','SC101','05','1',98,0);
 
insert into Registration values
('256677','AR231','05','2',61,51);insert into Registration values
('256677','FA201','05','2',45,0); insert into Registration values
('256677','FA222','05','2',69,0);insert into Registration values
('258234','FA101','05','1',49,0);insert into Registration values
('258234','FA201','05','2',53,0);insert into Registration values
('259234','FA101','05','1',32,18);insert into Registration values
('259234','FA111','05','1',22,12);
insert into Registration values
('263734','FA101','06','1',31,0);insert into Registration values
('263734','SC101','06','1',34,0);insert into Registration values
('263734','FA111','06','1',53,45);insert into Registration values
('263734','FA211','06','2',41,33);insert into Registration values
('263734','AR201','06','2',58,54);insert into Registration values
('265478','AR101','06','1',88,91); insert into Registration values
('265478','AR122','06','1',85,76); insert into Registration values
('265478','AR123','06','2',71,0); insert into Registration values
('265478','AR201','06','2',56,41); insert into Registration values
('265478','FA222','06','2',44,0); insert into Registration values
('265676','AR101','06','1',99,84); insert into Registration values
('265479','AR101','06','1',64,64); insert into Registration values
('265479','AR122','06','1',88,45);insert into Registration values
('265479','FA222','06','2',17,0); insert into Registration values
('265479','AR201','06','2',78,79); insert into Registration values
('265479','AR122','06','2',97,0); insert into Registration values
('267489','AR131','06','1',83,56); insert into Registration values
('267489','AR231','06','1',66,56);insert into Registration values
('267489','AR101','06','1',64,43);insert into Registration values
('268548','AR101','06','1',50,0); 
commit;

解决方案 »

  1.   

    给你个语句参考,这是计算每个学期所有学生的某一课程的平均select a.year,
           a.semester,
           a.moduleid,
           a.avgcw * b.cwweight / 100 + a.avgexam * b.examweight / 100 avgttl
      from (select year,
                   semester,
                   moduleid,
                   avg(cw) avgcw,
                   avg(exam) avgexam
              from Registration
             group by year, semester, moduleid) a,
           module b
     where a.moduleid = b.moduleid
      

  2.   

    谢谢这位大侠,能不能把这个换成用函数function的return来解决?