Mysql 计算每个帐户组的记录数量,其中加入日期=每月

Mysql 计算每个帐户组的记录数量,其中加入日期=每月,mysql,count,Mysql,Count,我有一个表accounts,其中包含accountgroup和joineddate以及其他字段。使用MySQL版本5.5.35-cll 基本上,我想做的是计算每个账户组每月发生的“注册”数量。不仅仅是每月的总金额,还需要知道每个accountgroup每月有多少注册 所以结果会是这样的: 我尝试了几种不同的方法,但只成功地获得了一个月的需求,而不是一年中所有的月份。当我尝试使用SUM时,它看起来像是在工作,但它并没有像预期的那样工作-似乎它认为每个组每月最多有1次注册,而实际上有些组至少有4或5

我有一个表accounts,其中包含accountgroup和joineddate以及其他字段。使用MySQL版本5.5.35-cll

基本上,我想做的是计算每个账户组每月发生的“注册”数量。不仅仅是每月的总金额,还需要知道每个accountgroup每月有多少注册

所以结果会是这样的:

我尝试了几种不同的方法,但只成功地获得了一个月的需求,而不是一年中所有的月份。当我尝试使用SUM时,它看起来像是在工作,但它并没有像预期的那样工作-似乎它认为每个组每月最多有1次注册,而实际上有些组至少有4或5次注册

这是我最近一次尝试SUM失败:

SELECT accountgroup, 
SUM( IF( MONTH =1, numRecords, 0 ) AND YEAR=2014) AS  'January', 
SUM( IF( MONTH =2, numRecords, 0 ) AND YEAR=2014) AS  'February', 
SUM( IF( MONTH =3, numRecords, 0 ) AND YEAR=2014) AS  'March', 
SUM( IF( MONTH =4, numRecords, 0 ) AND YEAR=2014) AS  'April', 
SUM( IF( MONTH =5, numRecords, 0 ) AND YEAR=2014) AS  'May', 
SUM( IF( MONTH =6, numRecords, 0 ) AND YEAR=2014) AS  'June', 
SUM( IF( MONTH =7, numRecords, 0 ) AND YEAR=2014) AS  'July', 
SUM( IF( MONTH =8, numRecords, 0 ) AND YEAR=2014) AS  'August', 
SUM( IF( MONTH =9, numRecords, 0 ) AND YEAR=2014) AS  'September', 
SUM( IF( MONTH =10, numRecords, 0 ) AND YEAR=2014) AS  'October', 
SUM( IF( MONTH =11, numRecords, 0 ) AND YEAR=2014) AS  'November', 
SUM( IF( MONTH =12, numRecords, 0 ) AND YEAR=2014) AS  'December', 
SUM( numRecords ) AS total
FROM (
SELECT accountgroup, MONTH( joineddate ) AS MONTH, YEAR( joineddate ) AS YEAR, COUNT( * ) AS numRecords
FROM accounts 
WHERE accountgroup <>''
GROUP BY accountgroup, MONTH, YEAR) AS SubTable1
GROUP BY accountgroup");
有人能告诉我怎么做吗?我很困惑:
提前感谢您的帮助

你们非常接近。您需要将年份条件放入if中。例如:

SUM(IF(MONTH = 1 AND YEAR = 2014, numRecords, 0)) AS January, 
SUM(IF(MONTH = 2 AND YEAR = 2014, numRecords, 0)) AS February, 
. . .
你不需要最后的括号。因此,查询应该如下所示:

SELECT accountgroup, 
       SUM(IF(MONTH = 1 AND YEAR = 2014, numRecords, 0)) AS January, 
       SUM(IF(MONTH = 2 AND YEAR = 2014, numRecords, 0)) AS February, 
       . . . 
       SUM( numRecords ) AS total
FROM (SELECT accountgroup, MONTH( joineddate ) AS MONTH, YEAR( joineddate ) AS YEAR, COUNT( * ) AS numRecords
      FROM accounts 
      WHERE accountgroup <>''
      GROUP BY accountgroup, MONTH, YEAR
     ) AS SubTable1
GROUP BY accountgroup";
另外,不要对应该是列名或表名的内容使用单引号。在这种情况下,不需要转义这些名称。使用双引号或反勾号。仅对字符串和日期常量使用单引号