将学生成绩的 AVG 插入到另一个名为最终成绩的 table 属性中

Insert the AVG of a student's grade into another table's attribute called final grade

我创建了这个数据库:

create table student(
student_cod int primary key,
name varchar(30),
birth_date date);

create table course(
code_c int primary key,
description_c varchar(200));

create table discipline(
coddisc int primary key,
description_d varchar(200),
credits int,
course_code int,
constraint fk_coursecode foreign key (course_code) references course (code_c));

create table registration(
student_code int,
code_disc int,
date date,
grade1 number(3,1),
grade2 number(3,1),
grade3 number(3,1),
constraint fk_student foreign key (student_code) references student (student_cod),
constraint fk_coddisc foreign key (cod_disc) references discipline (coddisc));

create table history(
semester int,
final_grade number(3,1),
cod_student int,
cod_dis int,
constraint fk_codal foreign key (cod_student) references student (student_cod),
constraint fk_coddi foreign key (cod_dis) references discipline (coddisc));

insert into student values ​​(01, 'John', to_date('07/04/1998', 'MM/DD/YYYY'));
insert into student values ​​(02, 'Anna', to_date('07/03/2000', 'MM/DD/YYYY'));
insert into student values ​​(03, 'Marck', to_date('05/12/1995', 'MM/DD/YYYY'));

insert into course values ​​(01, 'Computer Science');

insert into discipline values ​​(01, 'Algorithms 1', 4, 1);

insert into registration values ​​(01, 01, to_date('08/01/2018', 'DD/MM/YYYY'), 9.3, 10.0, 8.8);
insert into registration values ​​(02, 01, to_date('07/01/2019', 'DD/MM/YYYY'), 8.7, 7.5, 10.0);
insert into registration values ​​(03, 01, to_date('09/01/2017', 'DD/MM/YYYY'), 10.0, 10.0, 9.5);

insert into history values ​​(01, 0.0, 01, 01);
insert into history values ​​(01, 0.0, 02, 01);
insert into history values ​​(01, 0.0, 03, 01);

我想知道如何取一个学生的 3 个成绩的平均值,并使用一个程序将该值插入到历史记录 table 中的期末成绩中。显然我必须更新它,我尝试为它创建一个过程,但它没有用。

无需过程,您可以使用单个更新语句更新 HISTORY table。

UPDATE history h
   SET h.final_grade =
           (SELECT (r.grade1 + r.grade2 + r.grade3) / 3
              FROM registration r
             WHERE r.student_code = h.cod_student AND r.code_disc = h.cod_dis);

一旦您的 HISTORY table 中有多个学期,您将需要一些方法来 link REGISTRATION [=22] 中的 REG_DATE =] 到 HISTORY table

中的 SEMESTER