【问题标题】:MySQL - get sum() of groupMySQL - 获取组的 sum()
【发布时间】:2012-05-16 14:53:05
【问题描述】:

我有这张表类似于MySQL - get 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 字段的总和。我是关于子查询的新手。

谢谢!

【问题讨论】:

  • 你想要最好的分数和分数的总和吗?
  • 不是最好的分数。我只想要分数的总和,g、b 和 m。

标签: php mysql group-by subquery


【解决方案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`

【讨论】:

  • 我编辑了我的问题。我还需要对 g,b,m 字段求和。我认为添加 SUM(g)、SUM(b) 和 SUM(m) 应该可以吗?
  • 是的,就是这样。
  • 我只得到每个人的第一行。有了 SUM(score) score, SUM(g) g, SUM(b) b, SUM(m) m 我得到了我想要的。谢谢!
猜你喜欢
  • 2011-09-27
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多