有这么个表,里面有三个字段,分别是学生ID,班级ID和成绩,如下:student_id class_id score现在我想取出成绩最高的前10名学生ID,但每个班级最多取2名(假设第3、6、9名都是1班的,则不取真正的第9名,而是让第10名替补上来,以此类推)请问这个SQL该怎么写,效率越高越好

解决方案 »

  1.   

    用程序实现吧。
    估计~SQL写出来了性能也不怎样。。
      

  2.   

    没有看到记录及要求结果,TRY:
    SELECT A.student_id,A.class_id,A.score
    FROM TT A LEFT JOIN TT B 
    ON A.class_id=B.class_id AND A.SCORE<=B.SCORE
    GROUP BY A.student_id,A.class_id,A.score
    HAVING COUNT(B.class_id)<=2
      

  3.   

    大哥的SQL果然强悍。。但是这个SQL。。要建立2个索引(student_id,class_id,score )和(class_id,score )可能有些不值得。。其实小弟的简单看法是,select * from tt order by score limit 15
    然后再程序里筛选,不够10条数据就再拿几条。。select * from tt order by score limit 15,5
      

  4.   

    关键楼主是要每个班级的前2名,用LIMIT似乎不行
      

  5.   

    http://blog.chinaunix.net/u/29134/showart_379356.html