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

相关推荐
YangYang9YangYan29 分钟前
2026 电商数据运营校招 JD 梳理|岗位任务、技能与面试考点汇总
大数据·数据库·数据分析
Sun 328530 分钟前
读懂集中式主备的集群状态与节点角色
数据库·opengauss·集群·节点角色·磐维数据库·运行状态
努力努力再努力wz1 小时前
【Redis进阶系列】:从主从复制到 Sentinel,一文建立故障检测、Leader 选举与 Failover 的完整心智模型
数据库·redis·缓存
达梦数据1 小时前
DMDRS搭建部署简介与运行环境
数据库
Omics Pro1 小时前
1个月2轮融资!长寿虚拟细胞
数据库·人工智能·算法·机器学习·自然语言处理
zcn1262 小时前
row_number()函数与group by性能比较
数据库·sql优化改写
小K讲AI营销2 小时前
AI基础设施融资路径的中美比较:资本市场模式与政策金融模式
大数据·数据库·人工智能
净水深流2 小时前
中国冷链冷库行业数据分析:从规模扩张到技术驱动
大数据·数据库·人工智能·冷库冷链
李兆龙的博客3 小时前
从一到无穷大 #94:ClickHouse TimeSeries——时间线组织与 Prometheus 兼容性
数据库
冰暮流星3 小时前
事务的四个特性(ACID)详解
数据库