1
我有下面列的表格学生:SQL:选择所有科目平均成绩的一个学生和打印根据消息
id subject grade date
---|-------|------|-----------|
1 | A | 1 | 01-MAR-10 |
1 | A | 5 | 05-APR-10 |
1 | B | 3 | 01-JUN-10 |
2 | A | 1 | 01-MAR-10 |
2 | C | 3 | 01-APR-10 |
在我的程序我通过学生证(P_ID),和我需要选择所有科目对于学生的平均成绩,如果学生有2个牌号为同一主体,只有最新的等级数,像这样:
为的p_id = 1:
id avgGrade
---|--------|
1 | 4 |
这是现在完成
我现在需要做的,以保存关于学生的成功信息在一个字符串和打印它与DBMS_OUTPUT。最高分是1分,最低分是5分。如果学生有一个单独的5分(作为主语的最后一个分数),不管他有多少平均分,字符串应该包含“学生失败”,如果学生没有5作为最后一个档次,并具有< = 1,5的平均值,该字符串应该包含“完美的平均”,否则只是“学生通过”
到目前为止的代码是:
CREATE OR REPLACE Procedure avg_grade
(p_id IN number)
IS
cursor c1 is
select a.id, avg(a.grade) avg_grade
from student a
inner join
(
select id, subject, max(date) max_date
from student
where id=p_id
group by id, subject
)b ON a.id=b.id and
a.subject=b.subject and
a.date=b.max_date
where a.id=p_id
group by id;
cursor c2 is
select grade
from student
where id=p_id;
DECLARE @out as varchar(50)
SET @out=NULL
IF c2.grade IN(5)
BEGIN
SET @out='student failed'
END
ELSE IF c2.grade NOT IN(5) AND c1.avg_grade IN (BETWEEN 1 AND 1,5)
BEGIN
SET @out='student has a perfect average'
END
ELSE
BEGIN
SET @out='student passed'
END
DBMS_OUTPUT.PUT_LINE(@out);
请帮忙
非常感谢!我现在怎么才能在avg_grade列中访问这个唯一的值? (我需要声明一个字符串,并根据平均等级覆盖它的内容)。如果我使用select,它将返回一个列表... – IAM 2013-05-04 17:15:19
你想做什么?你使用的是什么RDBMS? – 2013-05-04 17:18:12
我使用的是Oracle数据库11g企业版。我现在需要做什么,以保存关于学生成功的信息。最高分为1分,最低分为5分。 如果学生有一个单独的5(作为学科的最后一个分数),不管他有多少平均分,字符串应该包含“学生失败”,如果学生有没有5作为最后一个年级,平均<= 1,5,字符串应该包含“完美平均数”,否则只是“学生通过” – IAM 2013-05-04 17:24:26