sql 查询每个班前十名

有一张表,存储了各班级的学生信息及成绩,怎么查询每个班成绩前十名的学生信息

表建的很不合理啊
首先,班级要一张表
学生信息要一张表
成绩一张表

建数据库要有遵守三条原则啊,不然也很不方便查询
你这题,用分组也没办查. 楼上两位完全就是骗分的...没一个正确的

就说一楼的这句SELECT TOP 10 * FROM 表名 WHERE 条件 ORDER BY 成绩 DESC ...请问条件是什么?

再说二楼的selet top 10 * from 学生表 order by 成绩 desc
你这查出来的只是所有班所有前十名的成绩.而不是每个班的前十名

如果表只有一张,只能分班查...比如班级列叫calss,其中有一个班级Classone
select top 10 * from 表名 where class='Classone' order by 成绩
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-03
举例:
表[ClassInfo]:[ClassID],[StuID],[Score]
SQL如下:(每个班成绩前十名学生)

select a.*
from [ClassInfo] a
where (select count(*) from [ClassInfo] b on b.[ClassID]=a.[ClassID] and b.[Score]>a.[Score])<10
order by a.[ClassID] desc,a.[Score] desc

如果是学生信息表和学生成绩表用得是2个实体表,那就用连接查询,这里就不举例了。
明白?
第2个回答  2010-02-04
需要新建表然后用存储过程将前十名插入到新表
tTemp(class studentid)

create procedure a as
begin
delcare @strclassname char(50)
delete tTemp清空临时表
declare cc cursor for select distinct classname from ta(你的表)
open cc
fetch next from cc into @strclassname
while(@@FETCHSTATUS=0)
begin
select top 10 classname,studentid from ta where classname=@strclassname order by score desc into tTemp分别查出每个班的前十名插入到临时表
fetch next from cc into @strclassname
end
close cc
deallocate cc
end
以上是存储过程
select * from tTemp
查出所有班的前十名本回答被提问者采纳
第3个回答  2010-02-03
SELECT TOP 10 * FROM 表名 WHERE 条件 ORDER BY 成绩 DESC
第4个回答  2010-02-03
selet top 10 * from 学生表 order by 成绩 desc
相似回答