select 名字,分数,rank() over(partition by 年级id,班级id order by 分数 desc) rk_class,rank() over(partition by 年级id order by 分数 desc) rk_grade from tbname where 学校id = 1 order by 名字

解决方案 »

  1.   

    正确
    楼主可以分别用Rank()和Dense_rank()试试区别。Dense_rank()序列返回时没有间隔的数。
      

  2.   

    对的,用OVER开窗函数的确很容易就解决了,正如duanzilin(寻) 写的那样.
    但用RANK()还是用DENSE_RANK()楼主自己看看区别就知道了.
    但如果没有同分情况的话,两者结果是一样的,看不出区别,楼主可以造一些在一个班级内或是在一个学校内有同分的数据,就可以看出两者的区别了.至于到底想用哪一种,就随楼主自选了.