如何查询Oracle中三位最佳玩家?

时间:2014-12-12 11:22:23

标签: sql oracle

我有下表:

NAME   | SCORE
ALICE  | 100
BOB    | 90
CHARLES| 90
DUKE   | 80
EVE    | 70
...

我的问题如下:

如何通过一个查询提取三个最佳玩家的名字?在我的例子中,查询应该返回四个行(ALICE,BOB,CHARLES和DUKE),因为有两个银牌得主(他们都有90分)。

提前谢谢你。

2 个答案:

答案 0 :(得分:5)

Oracle为此目的具有DENSE_RANK分析函数:

select name, score from (
  select name, score, dense_rank() over(order by score desc nulls last) rank
  --                                                        ^^^^^^^^^^
  --                                                 reject NULL score at the end
  from t
) V
where rank < 4
order by rank, name

请参阅http://sqlfiddle.com/#!4/88445/5

答案 1 :(得分:1)

以下

怎么样?
select * 
  from table1
 where score >=
   (select score from (
     select score, rownum r from (
      select distinct score from table1 order by score desc
     ) where rownum <= 3
   ) where r = 3)
order by score desc

另请参阅此SQLFiddle:http://sqlfiddle.com/#!4/23e68/1