2011-07-01 4 views
2

다음과 같은 테이블 구조가 있습니다. 각 행은 하나의 게임이며, 각 사람은 매달 많은 시간 또는 전혀 플레이 할 수 없습니다.MySQL - 그룹 합계 max()를 얻습니다.

 
id | person | score | date | 
------------------------------------ 
1 | 32 | 444 | 2011-05 | 
2 | 65 | 528 | 2011-05 | 
3 | 77 | 455 | 2011-05 | 
4 | 32 | 266 | 2011-06 | 
5 | 77 | 100 | 2011-06 | 
6 | 77 | 457 | 2011-06 | 
7 | 77 | 457 | 2011-06 | 
8 | 65 | 999 | 2011-07 | 
9 | 32 | 222 | 2011-07 | 

매월 최고 점수를 얻으 려합니다. 위의 S 결과는 다음과 같아야합니다

 
person | SUM(ofbestofeachmonth) 
--------------------------------- 
    32  | 932 
    65  | 1527 
    77  | 912 

나는 내가 년의 분기 별 최종 출력에 필요하기 때문에 지금 userin 달 당 bests 점수 또는 어떤 범위

 
SELECT person, date, MAX(score) FROM tabgames WHERE MONTH(date) = 6 GROUP BY person HAVING (score>0) 

를 가져 오는 방법을 알고 나는 매월 최선을 다하고 MySQL 외부에 추가하고있다.

이제 그룹 별 최대 값을 읽었으며 여전히 결과를 얻으려고합니다. 어떤 도움

답변

6

하위 쿼리 :

SELECT person, SUM(best) 
FROM 
    (SELECT person, MAX(score) as best 
    FROM tabgames 
    WHERE MONTH(`date`) >= 1 AND MONTH(`date`) <= 6 
    GROUP BY person, MONTH(`date`)) as bests 
GROUP BY person 

이제 부질 사람과 MONTH (날짜)에 의해 그룹화됩니다, 그래서 매달에 대한 행을 반환합니다

.

+0

이렇게 생각했지만이 하위 쿼리는 매월 최대가 아닌 전체 범위의 각 사람에 대해 최대 점수를 반환합니다. 노력하고 있지만 여전히 붙어있는 일부 참여가 있어야합니다. – carpereret

+0

맞습니다. 나는 내 대답을 편집했다. 지금 시도해 보라. – jakubka

+0

감사합니다. 알림 : 내 사건은 아니지만 올해의 차례가 범위 인 경우 잘못된 행을 반환 할 수 있습니다. 단지 YEAR를 어디에 추가하십시오. – carpereret

0
Select t.person,Max(t.Score) from 
(
Select person,Sum(Score) as Score,Month('Date') as [Month] From tabgames 
WHERE MONTH(`date`) >= 1 AND MONTH(`date`) <= 6 
GROUP BY PERSON,Month 

) AS t 
+1

가독성을 위해 : 'MONTH (date)> = 1 AND MONTH (date) <= 6'을 다시 쓸 수 있습니다 :'MONTH (date) BETWEEN 1 AND 6' –