2016-11-30 29 views
1

我有一個表,看起來像這樣:SQL SELECT 10計數從不同的條目限制所有點每個ID

ID GameID DateID Points Place 
------------------------------------- 
    10  1  1  100  1 
    11  1  1  90  2 
    12  1  1  80  3 
    13  1  1  70  4 
    14  1  1  60  5 
    10  1  1  100  1 
    10  1  1  50  1 
    10  1  1  100  1 
    10  1  1  100  1 
    10  1  1  100  1 
    10  1  1  100  1 
    10  1  1  100  1 
    10  1  1  100  1 
    10  1  1  100  1 
    10  1  1  50  5 
    10  1  1  50  5 
    12  1  1  100  1 
------------------------------------- 

我想要一套有兩列,一列總積分(累加分數/分表)一名球員和一名球員的id。但是對於一個玩家來說,只有十個分數可以被計數,例如,如果一個玩家玩了十三次,那麼只有十個最高分數被計數。 對於上面的例子我想有一個表,看起來像這樣:

ID totalPoints 
------------------- 
    10  950   
    11  90   
    12  180   
    13  70   
    14  60    
------------------ 

在我嘗試這樣的時刻:

SELECT ID, 
     sum(Points) AS totalPoints 
    FROM (SELECT Points, ID 
       FROM Gamer 
       ORDER BY Points DESC LIMIT 10) AS totalPoints 
    ORDER BY Points DESC 

,但它在所有十個而不是限制條目十每位玩家。

我希望有人能幫助我:)

+0

如果重複工作中沒有任何選項適合您,並且您真的被卡住了,那麼請在此處放置一條消息,我想我可以再次回答這個問題。 –

+0

我真的很抱歉,但我真的被卡住了。 – egolive

+0

你已經復活了。你有沒有嘗試任何方法? –

回答

0

在所有現有版本:

DELIMITER $ 
CREATE FUNCTION `totalPoints`(gamer_id INT) RETURNS int(11) 
BEGIN 
DECLARE s INT DEFAULT 0; 
SELECT SUM(Points) INTO s FROM (SELECT Points FROM Gamer WHERE ID=gamer_id ORDER BY Points DESC LIMIT 10) sq; 
RETURN s; 
END$ 
DELIMITER ; 

SELECT DISTINCT ID, totalPoints(ID) FROM Gamer; 

替代在MariaDB 10.2(目前是測試版),其中有窗函數:

SELECT ID, SUM(Points) FROM ( 
    SELECT ID, Points, ROW_NUMBER() 
    OVER (PARTITION BY ID ORDER BY Points DESC) AS nm 
    FROM Gamer 
) sq WHERE nm <= 10 GROUP BY ID; 

我我很確定還有其他方法可以做到這一點,這兩個是第一個想到的。

相關問題