【2023.10.25练习】数据库-函数2

任务描述

本关任务:编写函数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计算

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

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

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语法和变量使用。

相关推荐
2501_9010064711 小时前
Golang map底层实现原理_Golang map哈希表原理教程【收藏】
jvm·数据库·python
寒山独见君~11 小时前
自动化-消息推送Server酱3,APP推送
运维·数据库·python·自动化·通知
qq_3926906611 小时前
Go语言怎么做DNS查询_Go语言DNS域名解析教程【完整】
jvm·数据库·python
m0_6315298211 小时前
PHP 中 OR 运算符逻辑误用的典型陷阱与正确写法
jvm·数据库·python
步辞11 小时前
如何用 style.setProperty 修改带有优先级的 CSS 变量属性
jvm·数据库·python
xxjj998a11 小时前
Laravel7.x核心特性全解析
数据库·mysql·adb
让我上个超影吧11 小时前
【MYSQL】索引下推
java·数据库·mysql
m0_6315298211 小时前
CSS如何利用Less快速生成颜色渐变背景_使用混合函数生成多样渐变
jvm·数据库·python
重生之我是Java开发战士11 小时前
【MySQL】 索引的底层原理与使用:B+树、数据页与 InnoDB
数据库·b树·mysql
m0_6245785911 小时前
Laravel Blade 中高效筛选并限制关联分类数据的实践方案
jvm·数据库·python