2016-08-12 3 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. 아직 수행하지 않은 경우 문제를보다 쉽게 ​​복제 할 수 있도록 적절한 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에 대한 개의 다른 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 
관련 문제