数据库复杂查询问题(我个人认为复杂)

ynymark 2004-11-19 09:42:04
谢谢,其实我讲的可能不够明白。我主要要实现这样的目的,我有一个一个年级表,结构如下
学号 姓名 班级 总分
1 1 1班 100
2 2 1班 100
...
1 1 2班 100
2 2 2班 100
...
...
一共可能有十几个班级的数据放在这个表的,我现在要求得到这样一个统计结果.将各班的前25名的学生数据统计出来,放在一个新的表中.请问该如何解决.
...全文
145 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
37350792 2004-11-20
  • 打赏
  • 举报
回复
挺麻烦!用游标可以做到,但是太麻烦,而且性能不好!

可以先做一个临时表
select distinct 班级 into #班级 from 年级表
如果不允许临时表的话,可将下面表达式的中临时表展开成原型

select *
from 年级表 a ,#班级 b
where a.班级 = b.班级
and a.学号 in
( select top 25 学号 from 年级表 d where d.班级= b.班级
order by 总分 desc)
order by a.班级 ,a.总分 desc

这个语句是我花了半个小时做的(包括测试数据的录入!)没问题
算是精典了!不能比这更短的语句实现你的功能了!
limit 2004-11-19
  • 打赏
  • 举报
回复
declare classcur cursor for
select distinct class from table1

--创建一个临时表,结构与主表一致
select top 1 * into #tt from table1
delete from #tt

open classcur
declare @class varchar(100)
fetch next from classcur into @class
while @@fetch_status=0
begin
--找出前25名的学生,插入临时表中。
--其它处理也可以在这里完成。如判断是否第25名与后面几位的成绩一致,是否要查询出来。 insert into #tt
select top 25 * from table1 where class=@class order by score
fetch next from classcur into @class


end

close classcur
deallocate classcur

--查询临时表中的内容,即是所需内容
select * from #tt
angel_piner 2004-11-19
  • 打赏
  • 举报
回复
用group by
ynymark 2004-11-19
  • 打赏
  • 举报
回复
那如果班级是未知的,如下次的表的初二4,5,6班,那该如何动态生成这个语句呢?
jilong4 2004-11-19
  • 打赏
  • 举报
回复
错了,是班2
select * from
(select top 25 * from 1班
union
select top 25 * from 2班
union
....) a
jilong4 2004-11-19
  • 打赏
  • 举报
回复
select * from
(select top 25 * from 1班
union
select top 25 * from 1班
union
....) a
leolan 2004-11-19
  • 打赏
  • 举报
回复
select 班级,SUM(总分) As 总分 into #NewTable
from 年級表
where 學號 <= 25
group by 班级
SoHo_Andy 2004-11-19
  • 打赏
  • 举报
回复
如果得分有相同怎么办,比如1班有100人,每人都是100分,你的前25名是什么概念?

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧