我有下表:
NAME | SCORE ALICE | 100 BOB | 90 CHARLES| 90 DUKE | 80 EVE | 70 ...
我的问题如下:
如何通过一个查询提取三个最佳玩家的名字?在我的例子中,查询应该返回四个行(ALICE,BOB,CHARLES和DUKE),因为有两个银牌得主(他们都有90分)。
提前谢谢你。
答案 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
答案 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