MySQL - получить сумму () сгруппированных max () группы - PullRequest
2 голосов
/ 02 июля 2011

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

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

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 02 июля 2011

подзапросов:

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

Теперь подзапрос сгруппирован по персоне и МЕСЯЦУ (дате), поэтому он будет возвращать строку для каждого месяца.

0 голосов
/ 03 июля 2011
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
...