本关任务:编写函数fun_2,实现指定学生的GPA计算。输入参数为学号,函数返回值为该生的GPA。
在代码文件“step3/query1.sql”中实现函数fun_2; 在代码文件“step3/query2.sql”中实现在select命令中调用函数fun_2,查询所有学生的GPA(按学号的升序输出),结果集数据项:学号、姓名、GPA。
学生表(student) : 学号(sno) char(10) 姓名(sname) varchar(50) 性别(ssex) char(2) 出生日期(sbirth) date 所在系(sdept) varchar(20) 课程表(course) : 课程号(cno) char(4) 课程名(cname) varchar(50) 先行课(cpno) char(4) 学分(credit) decimal(3,1) 学期(semester) smallint 选修表(sc): 学号(sno) char(10) 课程号(cno) char(4) 成绩(grade) smallint
GPA=(课程学分1×课程绩点1+课程学分2×课程绩点2+……+课程学分n×课程绩点n)÷(课程学分1+课程学分2+……+课程学分n) 课程绩点换算表:
成绩 | 绩点 |
---|---|
100-96 | 5.0 |
95-91 | 4.5 |
90-86 | 4.0 |
85-81 | 3.5 |
80-76 | 3.0 |
75-71 | 2.5 |
70-66 | 2.0 |
65-61 | 1.5 |
60 | 1.0 |
query1.sql
- use DB1;
-
- delimiter $$
- #请在此处添加函数实现代码
- ########## Begin ##########
- CREATE FUNCTION fun_2(student_id CHAR(10)) RETURNS DOUBLE
- BEGIN
- DECLARE total_credits DOUBLE;
- DECLARE total_points DOUBLE;
- DECLARE gpa DOUBLE;
-
- SELECT SUM(course.credit),/*课程学分1+课程学分2+......+课程学分n*/
- SUM(((TRUNCATE(((sc.grade-1)/5),0)-9)/2*course.credit))/*(课程学分1x课程绩点1+......*/
- INTO total_credits,total_points
- FROM sc
- JOIN course ON sc.cno = course.cno
- WHERE sc.sno = student_id;
- SET gpa = total_points / total_credits;
- RETURN gpa;
- END$$
-
-
-
- ########## End ##########
- delimiter ; #恢复分号来作为语句标识。
query2.sql
- use DB1;
-
- #请在此处添加在select命令中调用函数的代码
- ########## Begin ##########
- SELECT student.sno AS 学号,
- student.sname AS 姓名,
- fun_2(student.sno) AS GPA
- FROM student
- ORDER BY student.sno;
-
-
-
- ########## End ##########
总结:熟练运用select into语法和变量使用。