sql利用while循环和游标,统计并输出每门课程的平均成绩
时间: 2024-12-15 07:28:12 浏览: 14
在SQL中,虽然直接使用while循环和游标并不是标准操作,因为大多数现代数据库系统倾向于提供内建的聚合函数和查询优化来处理这类计算。然而,在一些支持存储过程的语言或环境中,如PL/pgSQL(PostgreSQL)或者Oracle PL/SQL,你可以使用循环结构配合游标来实现类似的功能。
假设我们有一个名为`courses`的表,包含字段`course_id`, `student_id`, 和 `score`,可以尝试编写一个存储过程来统计每门课程的平均分:
```sql
CREATE OR REPLACE PROCEDURE get_course_avg_scores(p_start INT := 1, p_limit INT := 100)
AS
BEGIN
DECLARE v_cur CURSOR FOR
SELECT course_id, AVG(score) as avg_score
FROM courses
GROUP BY course_id;
DECLARE v_row COURSE_ROW;
OPEN v_cur;
WHILE v_cur IS NOT NULL LOOP
FETCH v_cur INTO v_row;
IF SQLCODE = 0 THEN
DBMS_OUTPUT.PUT_LINE('Course ID: ' || v_row.course_id || ', Average Score: ' || v_row.avg_score);
END IF;
END LOOP;
CLOSE v_cur;
END;
/
```
然后你可以通过调用这个存储过程来获取结果:
```sql
EXECUTE get_course_avg_scores;
```
注意这仅适用于支持存储过程和游标的数据库环境。如果你是在纯SQL查询层面,通常会直接编写一条SQL来获取所有课程的平均成绩,例如:
```sql
SELECT course_id, AVG(score) as avg_score
FROM courses
GROUP BY course_id;
```
阅读全文