MySQL - 得到sum()分组max()的组

时间:2011-07-01 21:47:25

标签: mysql group-by groupwise

我有如下表结构。每一行都是一个玩过的游戏,每个人每个月都可以玩很多次,也可以不玩任何一次。

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。

现在我正在阅读有关群组最大化的内容,并且仍然尝试获得令人满意的结果。任何帮助

2 个答案:

答案 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