SC(S#,C#,score) 成绩表 用一条sql查询各科成绩前三名的s#,c#,score:(不用考虑成绩并列情况) 

解决方案 »

  1.   

    with t1 as (select s#,c#,score,row_number()over(partition by c# order by score desc) rn
     from sc)
    select * from t1
     where rn<=3
      

  2.   

    如果考虑并列,你可以根据自己情况选择rank或者dense_rank函数
      

  3.   


    create table sc(s# varchar2(20), c# varchar2(20), score number);
    insert into sc values ('張三', '語文', 80);
    insert into sc values ('張三', '數學', 92);
    insert into sc values ('張三', '英語', 99);
    insert into sc values ('李四', '語文', 66);
    insert into sc values ('李四', '數學', 85);
    insert into sc values ('李四', '英語', 89);
    insert into sc values ('王五', '語文', 60);
    insert into sc values ('王五', '數學', 100);
    insert into sc values ('王五', '英語', 95);
    insert into sc values ('趙六', '語文', 100);
    insert into sc values ('趙六', '數學', 100);
    insert into sc values ('趙六', '英語', 100);
    commit;select s#,c#,score,r
    from (
    select s#, c#, score, rank() over (partition by c# order by score desc) r
    from sc
    )
    where r < 4
    order by c#, r;S#         C#              SCORE          R
    ---------- ---------- ---------- ----------
    王五         數學                100          1
    趙六         數學                100          1
    張三         數學                 92          3
    趙六         英語                100          1
    張三         英語                 99          2
    王五         英語                 95          3
    趙六         語文                100          1
    張三         語文                 80          2
    李四         語文                 66          3