如何通过按月分组来获取 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 中实现该结果?
最佳答案
据推测,您每个月至少有一个用户注册。如果是这样,您可以使用条件聚合:
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;
否则,您需要一个日历表或一种每月生成一行的方法。
关于php - 如何按月获取总用户数mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45898159/