第3章 SQL 习题 - 3.2

3.2 假设给你一个关系grade_points(grade, points),它提供从takes关系中用字母表示的成绩等级到数字表示的得分之间的转换。例如,‘A’等级可指定为对应于4分,‘A-’对应于3.7分,‘B+’对应于3.3分,‘B’对应于3分,等等。学生在某门课程(课程段)上所获得的等级分值被定义为该课程段的学分乘以该生得到的成绩所对应的数字表示的得分。

给定上述关系和我们的大学模式,用SQL写出下面的每个查询。为简单起见,可以假设没有任何takes元组在grade上取null值。

看到这,首先我们需要创建关系表grade_points,并且添加数据,执行如下sql:

create table grade_points(
	grade varchar(2),
	points numeric(2, 1) check (points >= 0),
	primary key (grade)
	);
insert into grade_points values('A', 4);insert into grade_points values('A-', 3.7);
insert into grade_points values('B+', 3.3);insert into grade_points values('B', 3);
insert into grade_points values('B-', 2.7);
insert into grade_points values('C+', 2.3);insert into grade_points values('C', 2);
insert into grade_points values('C-', 1.7);
insert into grade_points values('D+', 1.3);insert into grade_points values('D', 1);
insert into grade_points values('D-', 0.7);
insert into grade_points values('F+', 0.3);insert into grade_points values('F', 0);

然后再从数据库中检索,可以看到成功创建关系并生成数据:

题目上中说没有任何takes在grade上取null值,我们需要确认一下:

发现还是有空值的,我们暂且不管了。

a. 根据ID为12345的学生所选修的所有课程,找出该生所获得的等级分值的总和。

b.找出上述学生等级分值的平均值(GPA),即用等级分值的总和除以相关课程学分的总和。

c.找出每个学生的ID和等级分值的平均值。

猜你喜欢

转载自blog.csdn.net/zhangyingli/article/details/83956134