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

学号sno,姓名sname,系名sdept,课程cno,成绩grade,学生表student,课程表course,成绩表sc。... 学号sno,姓名sname,系名sdept,课程cno,成绩grade,学生表student,课程表course,成绩表sc。 展开
 我来答
tjrmgs
2018-04-16 · TA获得超过5765个赞
知道大有可为答主
回答量:2161
采纳率:94%
帮助的人:1033万
展开全部

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

SQL的艺术
2018-04-15 · SQL写多了就会在追求极致
SQL的艺术
采纳数:2040 获赞数:3323

向TA提问 私信TA
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Me孤魂
2018-04-14 · TA获得超过174个赞
知道小有建树答主
回答量:670
采纳率:47%
帮助的人:116万
展开全部
因为不知道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
更多追问追答
追问
关联情况你说的对a.cno是自己起吧我等下试试对了就给你采纳
关联情况你说的对a.cno是自己起吧我等下试试对了就给你采纳
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式