表结构如下
   学生ID(s_id)
   科目(s_kc)
   成绩(s_grade)
用一条SQL语句查出每科目成绩前两名的学生

解决方案 »

  1.   

    select * from 
    (select row_number() over( partition by t.s_kc order by t.s_grade desc) no, t.* from table t )
    where no <=2
      

  2.   

    SELECT *FROM (
    select 科目,成绩,学号,
    dense_rank() over (partition by 科目 order BY 成绩 asc nulls last) 排名
    FROM TABLE) WHERE 排名<=2;该语句包括了成绩一样,也就是并列名次的
      

  3.   

    刚才写错了,得排倒序
    SELECT *FROM (
    select 科目,成绩,学号,
    dense_rank() over (partition by 科目 order BY 成绩 desc nulls last) 排名
    FROM TABLE) WHERE 排名<=2;该语句包括了成绩一样,也就是并列名次的
      

  4.   

    来个不一样的吧select *
    from 成绩表 a
    where 学生ID in
    (
       select 学生ID
       from 
       (
         select * from 成绩表 order by 成绩 desc  
       )
       where a.科目=科目
       and rownum<=2
    )