首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一sql语句实现

2012-02-19 
请教高手一sql语句实现表结构如下,查询每个班级中分数最高的学生的记录(即查询返回每个班级中分数最高的那

请教高手一sql语句实现
表结构如下,查询每个班级中分数最高的学生的记录(即查询返回每个班级中分数最高的那条记录,而不是只是分数),   如果分数最高的多于一人,则取学分最高的那位;
------------------------------
班级     分数           学分           姓名
1             90             288.8         tom
1             98             288.8         Jack
1             98             290.0         rose
2             90             288.8         jane
2             91             288.8         joe
-------------------------------

查询结果如下:
------------------------------
班级     分数           学分           姓名
1             98             290.0         rose
2             91             288.8         joe
-------------------------------

用sql语句如何实现,谢谢指点!

[解决办法]
Create Table stu
(班级Int,
分数Int,
学分Numeric(10, 1),
姓名Varchar(10))
Insert stu Select 1, 90, 288.8, 'tom '
Union All Select 1, 98, 288.8, 'Jack '
Union All Select 1, 98, 290.0, 'rose '
Union All Select 2, 90, 288.8, 'jane '
Union All Select 2, 91, 288.8, 'joe '
GO
Select * From stu A Where Not Exists(Select 分数 From stu Where 班级 = A.班级 And (分数 > A.分数) Or (分数 = A.分数 And 学分 > A.学分))
GO
Drop Table stu
--Result
/*
班级分数学分姓名
198290.0rose
291288.8joe
*/
[解决办法]
create table #temp
(班级 int,
分数 int,
学分 decimal(10,1),
姓名 varchar(50)
)
insert into #temp
select '1 ', '90 ', '288.8 ', 'tom ' union all select '1 ', '98 ', '288.8 ', 'Jack ' union all select '1 ', '98 ', '290.0 ', 'rose ' union all select '2 ', '90 ', '288.8 ', 'jane ' union all select '2 ', '91 ', '288.8 ', 'joe '
select * from #temp


select * from #temp
select t1.*,t2.姓名 from
(select 班级,max(分数) 分数,max(学分) 学分 from #temp group by 班级) t1 left join #temp t2
on t1.班级=t2.班级 and t1.分数=t2.分数 and t1.学分=t2.学分


----------
1 98 290.0 rose
2 91 288.8 joe

热点排行
Bad Request.