当前位置: 代码迷 >> Sql Server >> 一sql语句实现
  详细解决方案

一sql语句实现

热度:39   发布时间:2016-04-27 17:45:54.0
请教高手一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
/*
班级 分数 学分 姓名
1 98 290.0 rose
2 91 288.8 joe
*/
------解决方案--------------------
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
  相关解决方案