创建一个从register表查询某一门课程考试成绩平均分的存储函数f_avg。要查询的课程号通过参数t_cid传递给存储函数,函数返回该课程的平均分。执行f_avg存储函数,查看执行结果。
时间: 2023-12-06 07:44:33 浏览: 47
下面是创建存储函数f_avg的SQL语句:
```sql
CREATE FUNCTION f_avg(t_cid INT) RETURNS FLOAT
BEGIN
DECLARE v_sum FLOAT;
DECLARE v_count INT;
SELECT SUM(score), COUNT(*) INTO v_sum, v_count FROM register WHERE cid = t_cid;
IF v_count = 0 THEN
RETURN 0;
ELSE
RETURN v_sum / v_count;
END IF;
END;
```
该函数以课程号为参数,查询register表中该课程的成绩总和和参加考试的人数,然后计算平均分并返回。
执行该存储函数的SQL语句如下:
```sql
SELECT f_avg(1);
```
其中参数1表示要查询的课程号,可以根据需要修改。
执行结果为该课程的平均分。
相关问题
在MySQL中 创建一个从register表查询某一门课程考试成绩平均分的存储函数f_avg。要查询的课程号通过参数t_cid传递给存储函数,函数返回该课程的平均分。执行f_avg存储函数,查看执行结果。
好的,下面是在MySQL中创建从register表查询某一门课程考试成绩平均分的存储函数f_avg的代码:
```
DELIMITER $$
CREATE FUNCTION f_avg(t_cid INT)
RETURNS FLOAT
BEGIN
DECLARE v_sum FLOAT;
DECLARE v_count INT;
SELECT SUM(score), COUNT(*) INTO v_sum, v_count FROM register WHERE cid = t_cid;
IF v_count = 0 THEN
RETURN -1;
ELSE
RETURN v_sum / v_count;
END IF;
END $$
DELIMITER ;
```
这里假设register表中包含cid和score两个字段,cid表示课程号,score表示考试成绩。您可以根据实际情况修改表名和字段名。
执行f_avg存储函数的代码:
```
SELECT f_avg(1);
```
这里假设1是您要查询的课程号,根据实际情况修改参数即可。执行结果会返回该课程的平均分。
创建存储过程proc2,显示成绩不及格的学生选课情况列表,其中包括学号、姓名、性别、专业号、课程号、课程名、成绩,调用proc2存储过程,观察执行结果。 3. 创建一个从student表查询学生信息的存储过程proc3,其中包括学号、姓名、性别、出生年月,专业号,要查询的专业号通过输入参数t_mid传递给存储过程,执行proc3存储过程,查看执行结果。 4. 创建一个从register表查询某一门课程考试成绩平均分的存储过程proc4。要查询的课程号通过输入参数t_cid传递给存储过程,avg_score作为输出参数用来存放查询得到的平均分。执行proc4存储过程,查看执行结果。
以下是相关的存储过程:
1. 存储过程proc2,显示成绩不及格的学生选课情况列表
```
CREATE PROCEDURE proc2()
BEGIN
SELECT student.sno, student.sname, student.ssex, student.sdept, course.cno, course.cname, score.degree
FROM student, course, score
WHERE student.sno = score.sno
AND course.cno = score.cno
AND score.degree < 60;
END;
```
2. 存储过程proc3,查询指定专业号的学生信息
```
CREATE PROCEDURE proc3(IN t_mid CHAR(10))
BEGIN
SELECT sno, sname, ssex, sbirthday, sdept
FROM student
WHERE sdept = t_mid;
END;
```
3. 存储过程proc4,查询指定课程号的考试成绩平均分
```
CREATE PROCEDURE proc4(IN t_cid CHAR(10), OUT avg_score DECIMAL(5,2))
BEGIN
SELECT AVG(degree) INTO avg_score
FROM score
WHERE cno = t_cid;
END;
```
要执行这些存储过程,请使用以下命令:
1. 执行proc2:CALL proc2();
2. 执行proc3,例如查询专业号为"01"的学生信息:CALL proc3('01');
3. 执行proc4,例如查询课程号为"1001"的考试成绩平均分:CALL proc4('1001', @avg_score); SELECT @avg_score;