指引网

当前位置: 主页 > 数据库 > SQLServer >

查询每个各科班分数最高同学的名字,班级名称,课程名称,分数的语句

来源:网络 作者:佚名 点击: 时间:2018-03-14 17:59
[摘要] 查询每个各科班分数最高同学的名字,班级名称,课程名称,分数的语句这个问题是在csdn上一位朋友写的,但是答案有点复杂,而且查询使用的效率也不是很好,于是自己也写了一个。以下是

查询每个各科班分数最高同学的名字,班级名称,课程名称,分数的语句   这个问题是在csdn上一位朋友写的,但是答案有点复杂,而且查询使用的效率也不是很好,于是自己也写了一个。以下是表结构和数据, 有以下两张表,
  Class表  classid classname 1 高三(一)班 2 高三(二)班 3 高三(三)班 Student表  www.2cto.com  
  studentid   studentName classid 1    张三            2 2     李四           1 3    王五             1 4    赵六             3 5    钱七             2 6     孙九          3
  score表 scoreid course studentid score 1 数学 2 99 2 数学 3 60 3 数学 4 80 4 语文 5 79 5 语文 6 58 6  语文 1 66 7  英语 6 76 8 英语 4 87 9 英语 3 100 10 英语 2 69
  编写SQL语句查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数(问题有点绕口)  www.2cto.com   朋友的答案: if exists(select count(*) from sysobjects where type='U' and name='#temp')     drop table #temp select p.studentid,studentname,p.classid,classname,course,score into #temp from        (   select studentid,studentname,student.classid,classname            from student right outer join class on student.classid=class.classid) as p     left outer join score  on p.studentid=score.studentid select   (select top 1 studentname from  #temp where classname=x.classname and course=x.course order by score  desc) as '姓名',classname as '班级',course as '课程',max(score) as '分数'  www.2cto.com          from  #temp x group by classname,course order by classname   我自己的答案: select t.classname,course,max(score) 'score',min(t.studentName) 'studentName' from (select s.studentName,c.classname,r.course,r.score from student s inner join class c on s.classid=c.classid inner join score r on r.studentid=s.studentid ) as t  group by classname,course  
 
------分隔线----------------------------