日期:2014-05-18  浏览次数:20541 次

分组后Search字段出现问题
现有如下的表结构:
sid           sname         sscore         sclass
----         -----         ------         ------
  a1           jack             90               class1
  a2           tom               85               class1
  a3           jack             90               class1
  a4           jack             100             class2
  a5           nash             90               class2
  a6           jack             90               class2
  a7           jack             null           class3
其中sid为主键,现在我想首先取出sname为jack的数据,然后按照sclass进行分组,最后取出sscore最大的所对应的sid和sclass(由于在sql语句中使用了group   by所以sid字段无法直接取出,因为它既不是group   by字段,也不能被聚合函数所修饰,tips:所有字段中除了sscore是number型之外,其余全为varchar型,另外之所以要把数据凑成这样是为了测试重复数据)。
最后的结果应该为:
sid                 sscore         sclass
----               ------         ------
  a1                     90               class1
  a3                     90               class1
  a4                     100             class2
  a7                     null           class3


------解决方案--------------------
select e.sid,e.sname,max(e.sscore) over (partition by sclass) sscore
from (
select sid,sname,sclass,sscore,
rank() over(partition by sclass order by sscore desc) as rn
from chunting.dbo.student_score
where sname= 'zhang san '
) e
where e.rn=1