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

相关推荐
快乐柠檬不快乐8 分钟前
使用Python操作文件和目录(os, pathlib, shutil)
jvm·数据库·python
V1ncent Chen36 分钟前
SQL大师之路 13 聚合函数和分组
数据库·sql·mysql·数据分析
赵渝强老师37 分钟前
【赵渝强老师】高斯数据库(openGauss)的体系架构
数据库·postgresql·opengauss·gaussdb·国产数据库
IvorySQL1 小时前
开源同行,感谢有你|IvorySQL 社区邀您领取贡献者证书
数据库·postgresql·开源
IvorySQL1 小时前
PostgreSQL 技术日报 (3月19日)|当 AI 代理开始批量创建数据库
数据库·postgresql·开源
2401_874732531 小时前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python
l1t2 小时前
与系统库同名python脚本文件引起的奇怪错误及其解决
开发语言·数据库·python
星空露珠2 小时前
迷你世界UGC3.0脚本Wiki角色模块管理接口 Actor
开发语言·数据库·算法·游戏·lua
IpdataCloud2 小时前
指纹浏览器为什么要自建IP检测?基于IP数据云离线库的架构实践
数据库·网络协议·tcp/ip·架构·edge浏览器
翻斗包菜2 小时前
MySQL 从入门到精通:数据库核心知识与实战指南
数据库·mysql