MySQL - получить сумму () сгруппированных max() группы

У меня есть структура таблицы, как показано ниже. Каждая строка - это одна игра, в которую каждый может сыграть много или ни разу за каждый месяц.

id | человек | оценка | дата |
------------------------------------
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 результат выше должен быть:

 человек | СУММА (ofbestofeachmonth)
---------------------------------
  32     | +932
  65     |  1527
  77     |  912

Я знаю, как получить оценки лучших за месяц или пользователя

ВЫБЕРИТЕ человека, дату, МАКС. (Оценка) ИЗ вкладок ГДЕ МЕСЯЦ (дата) = 6 ГРУППА ПО ЛИЦУ ИМЕЕТ (оценка>0)

Поскольку мне нужен конечный результат за квартал года, теперь я получаю лучшие данные за каждый месяц и за пределами MySQL, который добавляю.

Сейчас я читаю о групповом максимуме и все еще пытаюсь получить ожидаемые результаты. Любая помощь

2 ответа

Решение

Подзапросы:

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(дата), поэтому он будет возвращать строку для каждого месяца.

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
Другие вопросы по тегам