2016-08-12 58 views
0

目前我正在苦於MySQL查詢。我想計算每輪用戶的分數。我試圖讓用戶獲得某個回合的最高分數。每輪MySQL用戶核心

我現在的結果是:

SELECT user_id, SUM(result_points), round_id 
FROM result 
GROUP by user_id, round_id 
ORDER by round_id ASC, MAX(result_points) DESC 

查詢結果:

Query result

似乎要被罰款,事情是:我只需要每回合得分最高的用戶。
像這樣:

preferred score

你有任何想法如何與給定的查詢做到這一點?

+0

如果你喜歡,可以考慮下列行爲這個簡單的兩步過程:1.如果您還沒有這樣做,提供適當的創建和插入語句(和/或sqlfiddle),這樣我們就可以更方便地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry

回答

1

您需要使用您有與每回合總點數,你是從查詢得到的MAX功能沿子查詢的查詢。

SELECT user_id, MAX(roundResults.points) as points, round_id 
FROM (SELECT user_id, SUM(result_points) as points, round_id 
    FROM result 
    GROUP by user_id, round_id 
    ORDER by round_id, points DESC) AS roundResults 
GROUP by round_id 

查看fiddle here

注意:ORDER BY points DESC保留user_id位置。

0

您的查詢應該是

SELECT user_id, MAX(result_points), round_id 
FROM result 
GROUP by user_id, round_id 
ORDER by round_id 
0

,如果您使用的是SUM(),因爲可以有針對同一USER_ID和round_id diferent result_points我不知道。如果不是的話,你可以嘗試:

SELECT result.user_id, result.result_points, result.round_id 
FROM result 
    JOIN (
    SELECT b.round_id, MAX(b.result_points) AS max_result_points 
    FROM result b 
    GROUP BY b.round_id 
) a ON result.round_id = a.round_id AND result.result_points = a.max_result_points 
ORDER BY result.round_id