這個(gè)問題是在csdn上一位朋友寫的,但是答案有點(diǎn)復(fù)雜,而且查詢使用的效率也不是很好,于是自己也寫了一個(gè),
查詢每個(gè)各科班分?jǐn)?shù)最高同學(xué)的名字,班級(jí)名稱,課程名稱,分?jǐn)?shù)的
。以下是表結(jié)構(gòu)和數(shù)據(jù),有以下兩張表,
Class表
classid classname
1 高三(一)班
2 高三(二)班
3 高三(三)班
Student表
studentid studentName classid
1 張三 2
2 李四 1
3 王五 1
4 趙六 3
5 錢七 2
6 孫九 3
score表
scoreid course studentid score
1 數(shù)學(xué) 2 99
2 數(shù)學(xué) 3 60
3 數(shù)學(xué) 4 80
4 語文 5 79
5 語文 6 58
6 語文 1 66
7 英語 6 76
8 英語 4 87
9 英語 3 100
10 英語 2 69
編寫SQL語句查詢出每個(gè)各科班分?jǐn)?shù)最高的同學(xué)的名字,班級(jí)名稱,課程名稱,分?jǐn)?shù)(問題有點(diǎn)繞口)
朋友的答案:
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 '班級(jí)',course as '課程',max(score) as '分?jǐn)?shù)'
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