【问题标题】:how to get total user count monthwise mysql如何按月获取总用户数mysql
【发布时间】:2017-08-26 17:48:57
【问题描述】:

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

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

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

我的代码

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

电流输出

+------+-------+-------+-------------+
| Year | Month | Count | TotalCount  |
+------+-------+-------+-------------+
| 2017 | 01    | 1     | 1           |
| 2017 | 04    | 4     | 5           |
+------+-------+-------+-------------+

首选输出

+------+-------+-------+-------------+
| Year | Month | Count | TotalCount  |
+------+-------+-------+-------------+
| 2017 | 01    | 1     | 1           |
| 2017 | 02    | 0     | 1           |
| 2017 | 03    | 0     | 1           |
| 2017 | 04    | 1     | 2           |
| 2017 | 05    | 0     | 2           |
+------+-------+-------+-------------+

这里 Count 是该月的新用户总数,TotalCount 是截至该月的用户总数。

NULL 结果是必需的。

如何在 mySQL 或 Laravel PHP 中实现该结果?

【问题讨论】:

标签: php mysql


【解决方案1】:

据推测,您每个月至少有一个用户注册。如果是这样,您可以使用条件聚合:

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。在这种情况下,您需要一个日历表或其他方式来生成所有月份。
猜你喜欢
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 2018-05-03
  • 2021-02-21
  • 2021-11-08
相关资源
最近更新 更多