将学生成绩的 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
列
我创建了这个数据库:
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
列