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