2016-08-12 7 views
0

現在、私はMySQLクエリに苦労しています。私は1ラウンドあたりのユーザーのスコアを計算したいと思います。私は特定のラウンドで最高のスコアを持つユーザーを取得しようとしています。MySQLユーザー数1回あたり

私の現在の結果:

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

この2つの簡単な手順を実行することをお勧めします。1.まだ実行していない場合は、適切なCREATEおよびINSERTステートメント(および/または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のポイントDESCは、user_idの配置を保持します。

0

あなたのクエリが同じuser_idをしてround_idためのdiferent result_pointsが存在する可能性があるため、あなたが)SUMを(使用している場合、私は知らない

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

でなければなりません。それはそうではないなら、あなたは試みることができる:

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 
関連する問題