2016-08-23 241 views
0

是否可以统计每天的新用户数并在同一查询中统计表中的所有用户数? 此查询正在运行(它每天计算用户数量),我只需要在计算所有用户的位置添加部分。MySQL - 统计每天的用户数量并统计它们全部

SELECT COUNT(iduser) as newUsers, add_date 
FROM cs_user 
GROUP BY DAY(add_date) 

例子,我需要:

newUsers add_date  
1 2016-05-05 17:33:49 
5 2016-03-10 16:44:33 
2 2016-04-15 19:50:42 
5 2016-05-16 18:46:52 
6 2016-04-18 15:01:34 
1 2016-03-21 23:50:40 
2 2016-03-22 18:22:48 
3 2016-03-23 22:02:45 
2 2016-03-25 16:38:56 
15 2016-04-27 18:05:43 
3 2016-04-29 04:54:05 
23 2016-03-30 17:27:26 

我需要一个新行,它应该翻腾所有用户的数量。

+0

你如何区分'新用户'和'老用户'?同时添加您的预期输出。 – 1000111

+0

这是基于时间的查询 - 你选择了一天,因为你想跟踪新用户(我将在稍后插入WHERE条件,只需要首先计算所有用户)。 – Sasha

+0

是的,可以使用条件计数(条件放在count()或sum()函数内)。 – Shadow

回答

3

可以使用WITH ROLLUP选项GROUP BY。这会向包含整体COUNT()的结果集添加额外的一行。

顺便说一下,the DATE() function会生成DATETIME项的日期,例如您的add_date列。 The DAY() function产生月份的一天。你应该决定你需要哪一个。

我认为这个查询会做你想做的。

SELECT COUNT(iduser) as newUsers, DATE(add_date) day 
    FROM cs_user 
GROUP BY DATE(add_date) WITH ROLLUP 
+0

这就是我想要的:)。非常感谢您的帮助和额外的解释。 – Sasha

2

你可以使用union:

SELECT COUNT(iduser) as newUsers, add_date 
FROM cs_user 
GROUP BY DAY(add_date) 

UNION ALL 
SELECT COUNT(iduser) as newUsers, NOW() 
FROM cs_user