2015-10-31 27 views
1

我想根據遊戲中的殺死數量創建一個排行榜,其中顯示前5名的玩家(殺傷次數相同的人的排名相同)。MySQL在一列中將記錄數量限制爲5個唯一值

我如何獲得所有記錄直到排名5位置(所有記錄直到最多5列中的唯一值(殺死))。

我希望這是有道理的。

該查詢還需要考慮地圖。例如:where地圖= 'MAP_NAME'

例如:

表:

Name, Map, Kills 
user0 - map2 - 30 
user1 - map1 - 30 
user2 - map1 - 27 
user3 - map1 - 54 
user4 - map1 - 34 
user5 - map1 - 34 
user6 - map1 - 27 
user7 - map1 - 22 
user8 - map1 - 22 
user9 - map1 - 31 
user10 - map1 - 21 
user11 - map1 - 27 
user12 - map2 - 34 

結果所需要的(所有的播放器/頂部5個等級與地圖名稱MAP1內的記錄):

1. user3 - 54 
2. user4 - 34 
    user5 - 34 
3. user9 - 31 
4. user1 - 30 
5. user2 - 27 
    user6 - 27 
    user11 - 27 

到目前爲止,我有:SELECT * FROM記錄WHERE地圖= 'map1' ORDER BY殺死DESC

但我需要限制返回的行數僅爲top 5 ranks所需的數量,而不是所有行。

回答

0

嘗試此查詢:

 SELECT * FROM records WHERE 
    map = 'map1' and kills in (SELECT * FROM 
(select Kills from records where map = 'map1' group by Kills order by kills desc limit 0,5) 
as x) order by Kills desc 

SQLFIDDLE

+0

什麼傳奇!謝謝 –

+2

我發現很難相信這個查詢實際上適用於發佈的問題。 –

+0

請運行小提琴來驗證輸出。 –

0

這裏是你如何做到這一點沒有頂部/限制功能:

SELECT ... FROM T t 
WHERE t.map = ? AND t.kills <= (
    select max(t2.kills) from T t2 
    where t2.map = t.map and (
     select count(distinct t3.kills) from T t3 
     where t3.map = t2.map and t3.kills <= t2.kills 
    ) <= 5 
) 
相關問題