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

学号sno,姓名sname,系名sdept,课程cno,成绩grade,学生表student,课程表course,成绩表sc。

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

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-04-15
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

第2个回答  2018-04-14
因为不知道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是自己起吧我等下试试对了就给你采纳

追答

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.cno
a.grade=b.grade
and a.sno=c.sno
and a.cno=d.cno
刚才的错了 试试这个吧。 关联错了个

追问

(select cno,max(grade) grade from sc group by cno)这句没懂

本回答被提问者和网友采纳

sqlserver查询各系各科成绩最高分的学生的学号,姓名,系名,课程名称,成 ...
student.sdept;上述语句已经测试通过。代码思路是:学生表与成绩表基于学号进行连接获取每个学号所在系名,然后用院系和课程号对成绩表分组汇总,求得每个院系、每个课程的最高得分(结果集c,含系名、课程号和最高分)。然后用结果集C再次与成绩表、学生表进行比对,筛选出获得每个系、每个课程的最高...

怎样在SQL Server中编写“查询XS_kc表中各同学的学号、姓名和成绩,把成...
select xs.学号,xs.姓名,xs_kc.成绩 from xs,xs_kc where xs.学号=xs_kc.学号

SQLServer中姓名,学号,性别,院系都用什么数据类型?
在SQLServer数据库中,对于不同的个人信息字段,数据类型的选择较为灵活。以下是关于姓名、学号、性别和院系的常见数据类型:1.姓名:通常情况下,姓名这一字段适合使用varchar类型,因为它可以存储较长的字符串,包括可能的姓氏和名字组合。2.学号:学号可能包含数字,所以可以使用int类型,它专为整数设计,...

SQL Server期末考试试题
1、SELECT 学号,姓名 FROM 学生WHERE 班级 = '软件041'2、SELECT * FROM 课程WHERE 课程名称 LIKE '%语言%'3、SELECT D.学号,D.姓名,D.班级FROM (SELECT TOP 5 学号 FROM 选课 ALEFT JOIN 课程 BON A.课程号 = B.课程号WHERE B.课程名称 = 'C语言'ORDER BY A.成绩 DESC) CLEFT JOIN...

SQLserver2000:A表有姓名,学号,总分 B表有学号,学科,成绩,怎样将B表的...
update A表 set A表.总分=a.分数 left join (select 学号,sum(成绩) as 分数 from B表 GROUP BY 学号)a on A表.学号=a.学号

sql查询某个学生的平均成绩的排名
4 5 6 7 8 9 10 11 select s.dname,s.sname,s.avggrade from (select t.dname,t.sname,t.avggrade,row_number() over (partition by t.dname order by t.avggrade desc) rn from (select a.name dname,b.name sname,avg(c.grade) avggrade from department a,student b,takes c w...

用SQL语句查询:取出一个信息系学生的学号。求高手帮忙如何实现只取一...
如果是oracle,使用rownum控制,语句如下:select 学号 from 学生信息表 where rownum = 1 and 系 = '物理系';如果是sqlserver,使用top来控制,语句如下:select top 1 学号 from 学生信息表 where 系 = '物理系';

sql数据库查询语句例子
查询“001”课程比“002”课程成绩高的所有学生的学号:查询平均成绩大于60分的同学的学号和平均成绩:查询所有同学的学号、姓名、选课数、总成绩:查询姓“李”的老师的个数:查询没学过“叶平”老师课的同学的学号、姓名:查询学过“001”并且也学过编号“002”课程的同学的学号、姓名:查询学过“...

实验六使用T-SQL编写存储过程访问数据库
其中包含学生表Student(Sno,Sname,Ssex,Sage,Sdept)、课程表:Course(Cno,Cname,Cpno,Ccredit)和学生选课表:SC(Sno,Cno,Grade);编写相应的存储过程,完成下面的功能:(1)编写一个存储过程,可以查询指定系的学生的选课信息,列出学号、姓名、所在系、课程名和成绩等内容。

access SQL查询的问题
(1)select 性别,count(学号) as 学生数,sum(case when 缺考科数 <=0 and 总成绩 > 180 and 小于50分科数 = 0 then 1 else 0 end) as 合格学生数,sum(case when 缺考科数 <=0 and 总成绩 > 180 and 小于50分科数 = 0 then 1 else 0 end) as 合格学生数\/count(学号) * 100...

相似回答