使用SQL计算平均每日独特使用量

时间:2010-09-12 08:39:48

标签: sql mysql

我有一个MySQL表“stats”,这是每次登录网站的条目列表。每个条目都有一个“ userId ”字符串,一个“ loginTime ”时间戳和其他字段。每个用户可以有多个条目 - 每次登录一个。我想编写一个查询,计算30天内每日独特登录的平均值。 有什么想法吗?

3 个答案:

答案 0 :(得分:1)

/ * 这应该为每个日期和该日期的唯一访问提供一行 * /

SELECT DATE(loginTime)LoginDate,COUNT(userID)UserCount

FROM stats

WHERE DATE(loginTime)BETWEEN [开始日期]和[结束日期]

GROUP BY DATE(登录时间),userID

注意:如果您能提供一些您想要的结果的样本数据会更有帮助。

答案 1 :(得分:0)

我可能错了,但是如果你这样做了select count(distinct userid) from stats where logintime between start of :day and end of day,那么在这30天的每一天中day取出了30个计数(可以预先计算缓存(因为你可能没有)用户在过去登录时))他们只是用您从

执行查询的编程语言对它们进行平均

我在看的时候看了http://unganisha.org/home/pages/Generating_Sequences_With_SQL/index.html并且想到你是否有一张表,说数字0到30可以为这个例子命名它的偏移量:

select avg(userstoday)
from (select count(userid) as userstoday, day
      from stats join offsets on (stats.logintime=(current_day)-offsets.day)
      group by day)

正如我所指出的,用户现在的价值可以预先计算并存储在表格中

答案 2 :(得分:0)

谢谢大家,最终我用过: SELECT SUM(uniqueUsers)/ 30 AS DAU FROM(

SELECT DATE(loginTime)AS DATE,COUNT(DISTINCT userID)AS uniqueUsers 来自user_requests 日期(loginTime)> DATE_SUB(CURDATE(),INTERVAL 30 天 ) GROUP BY DATE(loginTime) )AS daily_users

我使用SUM并除以30而不是平均值,因为在某些日子里我可能没有任何登录,我想要考虑到这一点。但是在任何日常交通繁忙的网站上,只需使用AVG即可获得相同的结果