我在努力为学生人数获得正确的价值时遇到了问题。我需要使用游标,我的程序的输出应该是这样的......我希望能够从正确的方向前往这里,因为我有点困惑。谢谢!
Class Name Number of Students
=================================
Biology 6
Calc 3
German 5
这是我目前的代码:
DECLARE
CURSOR c_1 IS
SELECT c.class_name, AVG(s.grade)
FROM class c, student s
WHERE c.class_id = s.class_id
GROUP BY class_name
ORDER BY class_name;
grade_rec c_1%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE(('Class Name') || ' ' || ('NUMBER OF Students'));
DBMS_OUTPUT.PUT_LINE('--------------------------------------');
FOR grade_rec IN c_1 LOOP
DBMS_OUTPUT.PUT_LINE(rpad(grade_rec.class_name, 15) ||
' ' || lpad(grade_rec.avg_grade, 10));
END LOOP;
END;
答案 0 :(得分:0)
这有点棘手。但您可以使用HAVING按结果与组进行比较。
您的选择会按类别为您提供平均值。现在你需要计算一个分数高于平均分的学生人数。
select class_name, count(*) from student s2,
(SELECT c.class_name, class_id, AVG(s.grade) avgg
FROM class c, student s
WHERE c.class_id = s.class_id
GROUP BY class_name, class_id) avg
where avg.class_id = s2.class_id
and s2.grade > avg.avgg
group by class_name
having count(*) > 2
我还没有对它进行过测试,但它会创建一个按类别划分的子查询。然后你再次加入学生,但只有那些平均成绩更高的学生。最后,使用having
子句来比较计数。