create table tbstudent
(
Sno varchar2(10) not null,
Sname varchar2(10)not null,
SBirthday date ,
SSex char(2)
);create table Tbscore
(
Sno varchar2(10)not null,
Subject varchar2(10)not null,
Score number ,
primary key (Sno,Subject)
);
这是两张表的字段 两张表的数据如下
1.tbstudent
SNO SNAME SBIRTHDAY SSEX
---------- ---------- ----------- ----
Y20101 张一某 1982-12-15 男
Y20102 王强 1983-9-21 男
Y20103 赵敏 1984-5-8 女
Y20104 李斯 1982-3-9 男
2、tbscore
SNO SUBJECT SCORE
---------- ---------- ----------
Y20101 XML 88
Y20102 XML 66
Y20103 XML 55
Y20104 XML 78
Y20101 ORACLE 64
Y20102 ORACLE 58
Y20103 ORACLE 44有一下4个问题
A、 编写SQL语句查询男同学的XML平均成绩,要求列出姓名和成绩两列;
B、 编写SQL语句查询出参加考试的各科成绩都及格的学员学号、平均成绩;
C、 用一条SQL语句,查询出科目、该科目成绩60分以上的学生个数;
D、 由于ORACLE的测试题目过难,导致大部分员考试成绩偏低,现要求你编写一个存储过程实现给指定科目的成绩提分,通过调用该过程plus(‘ORACLE’)实现给ORACLE科目提分。具体提分算法如下:给98分以下的每个人都加3分,若全班通过率达不到70%,则再给98分以下的每个人加3分,直到全班通过率达到70%为止。越看这些问题越迷糊,希望oracle高手给以答案。谢谢
(
Sno varchar2(10) not null,
Sname varchar2(10)not null,
SBirthday date ,
SSex char(2)
);create table Tbscore
(
Sno varchar2(10)not null,
Subject varchar2(10)not null,
Score number ,
primary key (Sno,Subject)
);
这是两张表的字段 两张表的数据如下
1.tbstudent
SNO SNAME SBIRTHDAY SSEX
---------- ---------- ----------- ----
Y20101 张一某 1982-12-15 男
Y20102 王强 1983-9-21 男
Y20103 赵敏 1984-5-8 女
Y20104 李斯 1982-3-9 男
2、tbscore
SNO SUBJECT SCORE
---------- ---------- ----------
Y20101 XML 88
Y20102 XML 66
Y20103 XML 55
Y20104 XML 78
Y20101 ORACLE 64
Y20102 ORACLE 58
Y20103 ORACLE 44有一下4个问题
A、 编写SQL语句查询男同学的XML平均成绩,要求列出姓名和成绩两列;
B、 编写SQL语句查询出参加考试的各科成绩都及格的学员学号、平均成绩;
C、 用一条SQL语句,查询出科目、该科目成绩60分以上的学生个数;
D、 由于ORACLE的测试题目过难,导致大部分员考试成绩偏低,现要求你编写一个存储过程实现给指定科目的成绩提分,通过调用该过程plus(‘ORACLE’)实现给ORACLE科目提分。具体提分算法如下:给98分以下的每个人都加3分,若全班通过率达不到70%,则再给98分以下的每个人加3分,直到全班通过率达到70%为止。越看这些问题越迷糊,希望oracle高手给以答案。谢谢
需要的结果不清楚
男同学的XML平均成绩只会出来一个值
要求列出姓名和成绩两列 是所有男同学的XML成绩
FROM (SELECT a.sname, avg(score) avg_score,COUNT (b.cno) tot_c,
SUM (DECODE (SIGN (b.score - 60), -1, 0, 1)) over_60
FROM tbstudent a, Tbscore b
WHERE a.Sno = b .Sno
GROUP BY a.sname)
WHERE tot_c = over_60
SELECT subject, sum(DECODE (SIGN (score - 60), -1, 0, 1)) num
FROM tbscore a
GROUP BY subject
select sc.subject,count(st.sno) from tbstudent st,tbscore sc where st.sno=sc.sno and sc.score>60
group by sc.subject
and b.subject = 'xml' group by a.name不知道是不是你要的结果
create or replace procedure addscore(subject tbscore.subject%type) is
v_total number:=0;
v_pass number:=0;
v_Rate number:=0;
begin
loop
update tbscore sc set sc.score= sc.score+3 where sc.subject=subject and sc.score<98;
commit;
select count(sc.sno) into v_total from tbscore sc where sc.subject=subject;
select count(sc.sno) into v_pass from tbscore sc where sc.subject=subject and sc.score>=60;
v_Rate:=v_pass/v_total;
exit when v_rate>=0.7;
end loop;
end addscore;
SELECT A.NAME, AVG(B.SCORE)
FROM TBSTUDENT A, TBSCORE B
WHERE A.SNO = B.SNO
AND A.SSEX = '男'
AND B.SUBJECT = 'XML'
GROUP BY A.NAME
楼主注意理解下答案的意思啊,6楼的只是XML小写导致查不出结果