php - MySQL-获取组的 sum()

标签 php mysql group-by subquery

我有这张类似于 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 字段的总和。我对子查询非常陌生。

谢谢!

最佳答案

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

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`

关于php - MySQL-获取组的 sum(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10621151/

相关文章:

php - 查询返回成功但没有更新行

mysql - SQL 语句返回 null 而不是空

php - 使用 foreach() 更新 MySQL 表

hadoop - Pig - 分组后 MAX 不工作

php - 如果两个表中都存在相同的 ID,如何隐藏选择下拉列表中的选项

PHP 每晚 : Parameter must be an array or an object that implements Countable

php - 如何在 Apache 2.4 上启用 mod_rewrite?

mysql - 语句无法执行(HY000 - 2006 - MySQL 服务器已消失)(Amazon RDS DB)

python - 为什么 groupby 操作的行为不同

mysql - 按类型对 mysql 结果进行分组 - 但仅按特定顺序