现有三个自由表:
学生信息表:myStudent,由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在院系(Sdept)五个属性组成,其中为Sno主码。
课程信息表:myCourse,由课程号(Cno)、课程名(Cname)、选修课号(Cpno)、学分(Ccredit)四个属性组成,其中Cno为主码。
学生选课表:mySc,由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,主码为(Sno, Cno),有外键约束。
我想得到的是个人平均分高于所有人平局分的个人所有信息
我的语句是:
select a.sno , a.sname , a.ssex , a.sage , a.sdept , b.cno , b.cname , b.cpno , b.ccredit , c. grade from
mystudent a left join mysc c on a.sno = c.sno left join mycourse b on c.cno = b.cno ,
(select avg(to_number(grade)) grade1 from mysc c) d , (select sno,avg(to_number(grade)) grade2 from mysc c group by c.sno ) e
where a.sno in e.sno and e.grade2 > d.grade1能查到想要的结果,就是感觉太长
有没有比较方便快捷的方式?
学生信息表:myStudent,由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在院系(Sdept)五个属性组成,其中为Sno主码。
课程信息表:myCourse,由课程号(Cno)、课程名(Cname)、选修课号(Cpno)、学分(Ccredit)四个属性组成,其中Cno为主码。
学生选课表:mySc,由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,主码为(Sno, Cno),有外键约束。
我想得到的是个人平均分高于所有人平局分的个人所有信息
我的语句是:
select a.sno , a.sname , a.ssex , a.sage , a.sdept , b.cno , b.cname , b.cpno , b.ccredit , c. grade from
mystudent a left join mysc c on a.sno = c.sno left join mycourse b on c.cno = b.cno ,
(select avg(to_number(grade)) grade1 from mysc c) d , (select sno,avg(to_number(grade)) grade2 from mysc c group by c.sno ) e
where a.sno in e.sno and e.grade2 > d.grade1能查到想要的结果,就是感觉太长
有没有比较方便快捷的方式?
解决方案 »
- oracle中出现“sp2-0042:未知命令“scott”-其余行忽略””
- Oracle10g创建数据库时出现错误:"ORA_12546:TNS:权限被拒绝",请问怎么回事?
- 能否自己写一个类似sum的函数用法也一样?(在线等待,解决立即结帖,分不够可再加!!)
- 问题:如何让oracle每天自动去莫张表中查特定的数据,并触发对应的事件
- 急求高手帮忙,关于oracle的存储过程的
- 兄弟们,帮我看看这个存储过程有什么错误.
- 简单日期问题,20分足够了
- 不能在WIN2K下安装Oracle,50分求教。
- 请教大家一个存储过程的问题!!!请大家多多指教。谢谢!!!
- oracle9导出的dmp文件,在oracle8中怎么导入?[问题解决,立即给分,另再送100]
- imp 导入import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
- Oracle并行状态,归档模式,归档目录
SELECT A.SNO,
A.SNAME,
A.SSEX,
A.SAGE,
A.SDEPT,
B.CNO,
B.CNAME,
B.CPNO,
B.CCREDIT,
C. GRADE
FROM MYSTUDENT A --学生信息表
LEFT JOIN
(SELECT SNO, AVG(TO_NUMBER(GRADE)) GRADE2 FROM MYSC C GROUP BY C.SNO) E
ON A.SNO = E.SNO
WHERE E.GRADE2 > (SELECT AVG(TO_NUMBER(GRADE)) GRADE1 FROM MYSC C)
select Sno,Cno,
avg(Grade) over(partition by Sno) savg,
avg(Grade) over() allavg from mysc
) where savg > allavg ;这里只有编号,想要学生信息再连接一次,在里面连接也可以。