mssql sqlserver 取分组后数值最大的第一条数据记录


摘要:
下文通过实例的方式讲述,取学生成绩表中各科成绩第一名,具体方法如下所示:
实验环境:sql server 2008 R2



实现思路:
方法1:
使用group by对数据按照课程进行分组
方法2:
使用row_number对数据进行分组,(按成绩大小进行组内order by排序)

例:

  create table [maomao365.com]
(keChengName nvarchar(30),
 chengJi     decimal(18,1),
 name        nvarchar(10)
 )
 go
 insert into [maomao365.com]
 (keChengName,chengJi,name)values
 ('语文',98,'张三'),
 ('数学',92,'张三'),
 ('语文',90,'李四'),
 ('数学',100,'李四'),
 ('语文',83,'王二'),
 ('数学',98,'王二')
 go
 --方式1:使用group by 获取每科的最高分
 select keChengName as [课程名],
 max(chengJi) as [最高分]
  from [maomao365.com]
  group by keChengName 
  go
 
 --方式2:使用开窗函数分组排序后,再获取每科的最高分
  
  select * from 
  (
  select row_number()
   over(partition by keChengName  order by chengJi desc ) as keyId 
   ,* from [maomao365.com]
   ) t where t.keyId =1 
   go
 

 go
 truncate table [maomao365.com]
 drop table [maomao365.com]
mssql_sqlserver_分组取最大值_8743

mssql_sqlserver_分组取最大值_8743