Php 如何获得每月总用户数

Php 如何获得每月总用户数,php,mysql,Php,Mysql,如何通过按月分组获得mySQL中的总用户数 我想列出按月份分组的注册用户总数 这方面的困难在于,如果任何一个月内没有数据,我需要一个范围内所有月份的计数,计数必须为0 我的代码 优先输出 这里的Count是当月的新用户总数,TotalCount是当月的总用户数 空结果是必需的 我如何在mySQL或Laravel PHP中实现这一结果?大概每个月至少有一个用户注册。如果是,您可以使用条件聚合: SELECT tots.*, (@var := @var + tots.`count`) as tota

如何通过按月分组获得mySQL中的总用户数

我想列出按月份分组的注册用户总数

这方面的困难在于,如果任何一个月内没有数据,我需要一个范围内所有月份的计数,计数必须为0

我的代码

优先输出

这里的Count是当月的新用户总数,TotalCount是当月的总用户数

空结果是必需的


我如何在mySQL或Laravel PHP中实现这一结果?

大概每个月至少有一个用户注册。如果是,您可以使用条件聚合:

SELECT tots.*, (@var := @var + tots.`count`) as totalCount
FROM (SELECT YEAR(registered) AS `year`, MONTH(registered) AS `month`,
             SUM( id = 73 ) AS `count`
      FROM user 
      WHERE registered >= '2017-01-01' AND registered <= '2017-05-01'
      GROUP BY `year`, `month`
     ) tots CROSS JOIN
     (SELECT @var := 0) AS params;

否则,您需要一个日历表或每月生成一行的方法

大概每个月至少有一个用户注册。如果是,您可以使用条件聚合:

SELECT tots.*, (@var := @var + tots.`count`) as totalCount
FROM (SELECT YEAR(registered) AS `year`, MONTH(registered) AS `month`,
             SUM( id = 73 ) AS `count`
      FROM user 
      WHERE registered >= '2017-01-01' AND registered <= '2017-05-01'
      GROUP BY `year`, `month`
     ) tots CROSS JOIN
     (SELECT @var := 0) AS params;

否则,您需要一个日历表或每月生成一行的方法

谢谢。这段代码也给出了与我当前输出相同的输出。@Rajeev。所以你有一些年/月组合,没有用户有数据,而不仅仅是用户73。在这种情况下,您需要一个日历表或其他一些方法来生成所有月份。谢谢。这段代码也给出了与我当前输出相同的输出。@Rajeev。所以你有一些年/月组合,没有用户有数据,而不仅仅是用户73。在这种情况下,您需要一个日历表或其他一些方法来生成所有月份。输入一下怎么样?@草莓,我没听清楚。请看输出。有什么意见吗?@草莓,我没听清楚,明白吗
+------+-------+-------+-------------+
| Year | Month | Count | TotalCount  |
+------+-------+-------+-------------+
| 2017 | 01    | 1     | 1           |
| 2017 | 02    | 0     | 1           |
| 2017 | 03    | 0     | 1           |
| 2017 | 04    | 1     | 2           |
| 2017 | 05    | 0     | 2           |
+------+-------+-------+-------------+
SELECT tots.*, (@var := @var + tots.`count`) as totalCount
FROM (SELECT YEAR(registered) AS `year`, MONTH(registered) AS `month`,
             SUM( id = 73 ) AS `count`
      FROM user 
      WHERE registered >= '2017-01-01' AND registered <= '2017-05-01'
      GROUP BY `year`, `month`
     ) tots CROSS JOIN
     (SELECT @var := 0) AS params;