【问题标题】:Count amount of records per account group, where joined date = each month计算每个帐户组的记录数量,其中加入日期 = 每个月
【发布时间】:2014-02-12 16:29:47
【问题描述】:

我有一个表(帐户),其中包含帐户组和帐户的加入日期以及其他字段。使用 MySQL 版本 5.5.35-cll。

基本上我要做的是计算每个帐户组每月发生的“注册”数量。 (不仅仅是每月的总金额 - 需要知道每个帐户组中每个月发生了多少注册)。

所以结果看起来像这样:

intended results http://imageshack.com/a/img842/9105/drh9.gif

我尝试了几种不同的方法,但只在一个指定的月份成功地获得了我需要的东西,而不是一年中的所有月份。当我尝试使用 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");

谁能告诉我如何做到这一点?我很困惑:(
提前感谢您的帮助。

【问题讨论】:

    标签: mysql count


    【解决方案1】:

    你很亲密。您需要将year 条件放在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";
    

    另外,不要在应该是列名或表名的内容上使用单引号。在这种情况下,您不需要转义这些名称。使用双引号或反引号。仅对字符串和日期常量使用单引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多