SC表:
如图
student_number course_number分别是学生学号 课程号 score是成绩 学生参加多门课 
查询各科成绩前三名的记录:(不考虑成绩并列情况)

解决方案 »

  1.   

    不考虑并列,用row_number
    考虑并列,用rank或者dense_rank
      

  2.   

    能写一下sql出来看看吗 本人较笨
      

  3.   

    我自己解决了:
    select *
    from 
    (select rank() over(partition by course_number order by score desc ) rk,
    sc.* from sc) t
    where t.rk<4;
      

  4.   

    这样是不是比较快点
    with TT as
    (
      select student_number, course_number, score, row_number()over(partition by course_number order by score desc) ranks from sc 
    )
    select student_number, course_number, score from tt where ranks <= 3;