select a.*
FROM ( select 班级,
学号,
总成绩,
...其它信息
dense_rank() over(partition by 班级,学号 order by 总成绩 desc) 排名
from 年级成绩表
where ...
) a
where a.排名<=3
注:允许有并列的情况,也可把dense_rank() 换成 rank()试试看有什么不同
select a.* (select 班级...基本信息,dense_rank() over (partition by 班级 order by 成绩) 名次 from
年纪成绩表)a where a.名称<=3;
学习了