0

我有这个类似于MySQL 的表 - 得到 sum() grouped max() of group

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 字段的总和。我是关于子查询的新手。

谢谢!

4

1 回答 1

1

你不能只按月分组,因为同一个月可能会出现超过一年,所以也可以按年分组,例如:

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`
于 2012-05-16T14:55:31.117 回答