我有如下表结构。每一行都是一个玩过的游戏,每个人每个月都可以玩很多次,也可以不玩任何一次。
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 |
我正在努力争取每个人每个月最佳分数的总和。上面的结果应该是:
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。
现在我正在阅读有关群组最大化的内容,并且仍然尝试获得令人满意的结果。任何帮助
答案 0 :(得分:7)
子查询:
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(日期)分组,因此它将为每个月返回一行。
答案 1 :(得分: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