在MySQL中使用 studentsdb 数据库中的 curriculum 表、grade表。创建一个存储函数 avg_func,通过游标统计指定课程的平均分。
时间: 2024-10-15 14:20:42 浏览: 32
在MySQL中,你可以创建一个存储函数(Stored Procedure)来计算指定课程的平均成绩。首先,假设`curriculum`表有字段`course_id`表示课程ID,`grade`表有字段`course_id`和`score`分别表示课程ID和分数。下面是如何创建这个名为`avg_func`的存储函数:
```sql
DELIMITER //
CREATE FUNCTION avg_func(course_name VARCHAR(255))
RETURNS DECIMAL(10, 2)
BEGIN
DECLARE total_score DECIMAL(10, 2);
DECLARE count INT DEFAULT 0;
DECLARE @cursor CURSOR FOR
SELECT score FROM grade WHERE curriculum.course_id = (SELECT course_id FROM curriculum WHERE name = course_name);
OPEN @cursor;
CURSOR_LOOP: LOOP
FETCH @cursor INTO total_score;
IF FOUND THEN
SET total_score := total_score + NEW.score; -- 使用NEW关键字是为了处理游标变量
SET count = count + 1;
ELSE
LEAVE CURSOR_LOOP;
END IF;
END LOOP;
CLOSE @cursor;
RETURN total_score / COUNT_IF NOT NULL(count); -- 返回平均分,如果count为0,则返回NULL,所以使用COUNTIF来避免除零错误
END;
DELIMITER ;
```
现在你可以通过调用`avg_func('课程名')`来获取指定课程的平均分。比如:
```sql
SELECT avg_func('数学');
```
阅读全文