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

相关推荐
a9511416423 分钟前
Go语言如何操作OSS_Go语言阿里云OSS上传教程【完整】
jvm·数据库·python
2401_897190554 分钟前
MySQL中如何利用LIMIT配合函数分页_MySQL分页查询优化
jvm·数据库·python
Polar__Star27 分钟前
C#怎么使用并发集合 C#ConcurrentDictionary和ConcurrentQueue线程安全集合怎么用【进阶】
jvm·数据库·python
xiaoshuaishuai832 分钟前
C# Codex 脚本编写
java·服务器·数据库·c#
Rooting++38 分钟前
mysql 算一堆经纬度的距离总长
数据库·mysql
y = xⁿ1 小时前
MySQL:count(1)与count(*)有什么区别,深分页问题
android·数据库·mysql
苏渡苇1 小时前
5 分钟跑起 Redis(Docker 版)
数据库·redis·缓存·docker·redis入门
m0_493934531 小时前
Go语言中 & 与 - 的本质区别及指针使用详解
jvm·数据库·python
gjc5921 小时前
踩坑案例:容器方式部署的MySQL无法访问?
数据库·mysql
Greyson11 小时前
Redis如何解决哨兵通知延迟问题_优化客户端连接池动态刷新拓扑的订阅监听机制
jvm·数据库·python