sqlserver查询各系各科成绩最高分的学生的学号,姓名,系名,课程名称,成绩?
学号sno,姓名sname,系名sdept,课程cno,成绩grade,学生表student,课程表course,成绩表sc。...
学号sno,姓名sname,系名sdept,课程cno,成绩grade,学生表student,课程表course,成绩表sc。
展开
3个回答
展开全部
请参考下列SQL语句:
select student.sno,student.sname,student.sdept,
course.cname,t.maxgrade from
student,course,
(select s.sno,c.sdept,s.cno,c.maxgrade
from sc s,student st,
(select a.sdept,b.cno,max(b.grade) as maxgrade
from student a,sc b where a.sno=b.sno
group by a.sdept,b.cno) c
where s.sno=st.sno and st.sdept=c.sdept and
s.grade=c.maxgrade) t where student.sno=t.sno
and course.cno=t.cno order by course.cname,student.sdept;
上述语句已经测试通过。代码思路是:
学生表与成绩表基于学号进行连接获取每个学号所在系名,然后用院系和课程号对成绩表分组汇总,求得每个院系、每个课程的最高得分(结果集c,含系名、课程号和最高分)。然后用结果集C再次与成绩表、学生表进行比对,筛选出获得每个系、每个课程的最高分的学号并包含课程号和系名(结果集t)。最后t通过连接获取学生表中的学生姓名、课程表中的课程名完成最后输出。
展开全部
select
a.sno 学号,a.sname 姓名,a.sdept 系名,c.cname 课程名称,b.maxgrade 成绩
from
student a
inner join (select cno,max(sno) sno,max(grade) maxgrade from sc group by cno) b on a.sno=b.sno
inner join course c on b.con=c.cno
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为不知道3个表的具体结果只能推测3个表的关联情况
学生表student 的学号sno 和成绩表sc 的学号sno关联
课程表course的课程cno和成绩表sc 的课程cno关联
首先获得sc表中每门课程的最高成绩,然后跟sc关联获得其他信息,在分别去学生表,课程表关联,获得具体的信息
语句如下
select a.sno,c.sname,c.sdept,d.cno,b.grade from sc a,(select cno,max(grade) grade from sc group by cno) b,student c,coursed d
where a.cno=b.grade
and a.sno=c.sno
and a.cno=d.cno
学生表student 的学号sno 和成绩表sc 的学号sno关联
课程表course的课程cno和成绩表sc 的课程cno关联
首先获得sc表中每门课程的最高成绩,然后跟sc关联获得其他信息,在分别去学生表,课程表关联,获得具体的信息
语句如下
select a.sno,c.sname,c.sdept,d.cno,b.grade from sc a,(select cno,max(grade) grade from sc group by cno) b,student c,coursed d
where a.cno=b.grade
and a.sno=c.sno
and a.cno=d.cno
更多追问追答
追问
关联情况你说的对a.cno是自己起吧我等下试试对了就给你采纳
关联情况你说的对a.cno是自己起吧我等下试试对了就给你采纳
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询