2016-08-12 60 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