1、表a有两字段name(姓名,vchar),sorce(成绩,number),怎么找出最大三个分数的name,可能100分的有3,99分的2,98分一个,就是最高的三个分数记录?

解决方案 »

  1.   

    select distinct name, score from a where score in (select distinct score from a where rownum <= 3 order by score desc)
      

  2.   


    select name, score from (
    select name , score , dense_rank()over(order by score desc) rid from a 
    )
    where rid <= 3
      

  3.   

    select name, score from (
    select name , score , dense_rank()over(order by score desc) rid from a 
    )
    where rid <= 3
      

  4.   

    select distinct score from a where rownum <= 3 order by score desc
      

  5.   

    select distinct name, score 
    from a 
    where score in (
                     select score
                     from (select distinct score from a order by score desc)
                     where rownum <= 3 )
    必须先排序,然后再用rownum找出前3个分数。