现有如下的表结构:
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