sqlserver查询各系各科成绩最高分的学生的学号,姓名,系名,课程名称,成绩?

2024-11-25 13:11:10
推荐回答(3个)
回答1:

请参考下列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通过连接获取学生表中的学生姓名、课程表中的课程名完成最后输出。

回答2:

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个表的具体结果只能推测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