oracle 查询某一学科的成绩做优化,代码(根据课程,列出所有院系成绩及平均分数)...

分析:/*

用到的表:

--教师信息(教师编号tno,教师姓名tname,职称title,聘用时间hiredate,工资sal,奖金bonus,领导mgr,院系编号deptno)

--学生信息student(学生编号sno,学生姓名sname,性别sex,生日birth,密码passwd,院系编号dno)

--院系信息dep(院系编号dno,院系名称dname,教师编号director,电话tel)

--考试信息sc(学生编号sno,课程编号cno,分数grade)

--课程信息course(课程编号cno,课程名称cname,课程学分credit,课时ctime,课程分数quota)

*/

/*

过程分析:

1.得到课程

select cno,cname from course;

pcno 课程编号

pcname  课程名称

2.得到院系

select dno,dname from dep ;

pdno

pdname;

3.得到某课程,某院系,学生考试成绩

select grade from sc where cno=pcno and sno in (select sno from student dno=pdno);

psumstu 学生人数

psumgra 总分

count1

count2

count3

avggra = sumgra/sumstu;

4.插入结果

insert into msg1 values(pcname, pdname, count1,count2,count3,avggra);

*/

代码:declare

--定义光标cemp1:得到课程列表

cursor cemp1 is select cno,cname from course;

pcno course.cno%type;

pcname course.cname%type;

--定义光标cemp2:得到院系列表

cursor cemp2 is select dno,dname from dep;

pdno dep.dno%type;

pdname dep.dname%type;

--定义光标cemp3:得到某课程,某院系,学生考试成绩

cursor cemp3(xcno course.cno%type,xdno dep.dno%type) is select grade from sc where cno=xcno and sno in (select sno from student where dno = xdno);

pgrade sc.grade%type;

psumstu number;

psumgra sc.grade%type;

count1 number;

count2 number;

count3 number;

begin

open cemp1;

--取得一条课程数据

loop

fetch cemp1 into pcno,pcname;

exit when cemp1%notfound;

open cemp2;

loop

--取得一条院系

fetch cemp2 into pdno,pdname;

exit when cemp2%notfound;

--设置数据

count1 :=0;

count2 :=0;

count3 :=0;

psumstu :=0;

psumgra :=0;

open cemp3(pcno,pdno);

loop

--取得一条学员分数

fetch cemp3 into pgrade;

exit when cemp3%notfound;

if (pgrade<60) then count1 :=count1+1;

elsif (pgrade>=60 and pgrade<85) then count2 :=count2+1;

else count3 :=count3+1;

end if;

psumstu := psumstu +1;--学员总人数

psumgra := psumgra + pgrade;--学员总分数

end loop;

close cemp3;

--插入数据

--为了避免被除数0的错误,先判断psumstu的值是否为0

if(psumstu<>0) then

insert into msg1 values(pcname,pdname,count1,count2,count3,(psumgra/psumstu));

else

insert into msg1 values(pcname,pdname,count1,count2,count3,0);

end if;

end loop;

close cemp2;

end loop;

close cemp1;

end;

/

结果:--查看课程 大学物理 的成绩

select * from msg1 where coursename='大学物理';

b61588c17e93c530491e1467bd19cfe2.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值