MySQL - 获取组的 sum()


MySQL - get sum() of group

>我有这个类似于MySQL的表 - 获取组的sum()分组max()

id  |  person  |  score  |   date  |   g   |   b   |   m   |
-----------------------------------------------------------
1   |    32    |  444    | 2011-05 |   0   |   1   |   o   |
2   |    65    |  528    | 2011-05 |   1   |   0   |   1   |
3   |    77    |  455    | 2011-05 |   0   |   0   |   1   |
4   |    32    |  266    | 2011-05 |   1   |   1   |   0   |
5   |    77    |  100    | 2011-05 |   0   |   0   |   1   |
6   |    77    |  457    | 2011-05 |   1   |   0   |   0   |
7   |    77    |  457    | 2011-05 |   1   |   0   |   1   |
8   |    65    |  999    | 2011-05 |   0   |   0   |   1   |
9   |    32    |  222    | 2011-05 |   0   |   1   |   1   |

结果应该是:

person  |  score  |   date  |   g   |   b   |   m   |
-----------------------------------------------------
  32    |   932   | 2012-05 |   1   |   3   |   1   |
  66    |  1527   | 2012-05 |   1   |   0   |   2   |
  77    |  1469   | 2012-05 |   2   |   0   |   3   |

但我无法实现我想要的。我正在尝试为每个人获取每个月得分的总和,g,m和b字段。我对子查询很陌生。

谢谢!

您不能只按月分组,因为同一月份可能出现在一年以上,因此也可以按年份分组,例如:

SELECT person, YEAR(`date`), MONTH(`date`), 
    SUM(score), SUM(b), SUM(g), SUM(m)
FROM MyTable
GROUP BY person, YEAR(`date`), MONTH(`date`)

如果您的date列实际上不是日期类型,而是 varchar 或类似类型,并且它包含如图所示yyyy-dd,那么您可以执行以下操作:

SELECT person, `date`, 
    SUM(score), SUM(b), SUM(g), SUM(m)
FROM MyTable
GROUP BY person, `date`