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