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

Lás*_*ász 1 sql oracle

我有下表:

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

我的问题如下:

如何用一个查询提取三个最佳玩家的名字?在我的例子中,查询应该返回4行(ALICE,BOB,查尔斯和DUKE),因为有两个银牌得主(它们都具有90点).

先感谢您.

Syl*_*oux 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
Run Code Online (Sandbox Code Playgroud)

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