每日独特行动/国家/地区的每月独特行动?例如:DAU / MAU

时间:2015-02-10 17:36:55

标签: python sql postgresql pandas amazon-redshift

也许你们可以帮助我解决问题。我做了两个查询来跟踪每日唯一的操作数和每月唯一的操作数。但是,我现在想看看不同地区的这些数字,但我遇到了问题。我知道它会涉及一些我尚未完全包围的子查询。

关于我正在使用的内容,我正在使用Postgres进行查询,然后在pandas / python或R中进行查询。我非常有信心只需一个SQL查询就可以更快地完成。

我有一个类似于以下内容的事件表:

userid,    date,    event,      item
1,         1/1/15   like        A
2,         1/1/15   view        A
3,         1/1/15   view        B
2,         1/1/15   purchase    A
1,         1/1/15   view        B

要计算每日观看次数/每月观看次数,我目前执行以下操作:

daily_views = """
SELECT date(events.date) as daily_date, count(distinct events.userid) as daily_user 
FROM 
events
WHERE
date(events.date) between '2014-11-01' and '2015-01-31' AND
events.event LIKE '%%VIEW%%'
GROUP BY
date(events.date)"""

和每月

Monthly_Views = """
SELECT daily_date, daily_user, count(distinct events.userid) AS monthly_views
FROM
({daily_views})
LEFT OUT JOIN events ON events.date BETWEEN daily_date - INTERVAL '30 days' AND daily_date
WHERE events.event LIKE '%%LOGIN%%'
GROUP BY daily_date, daily_user
ORDER BY daily_date ASC""".format(daily_views=daily_views)

给我一​​张桌子:

date,daily_user,monthly_user

现在要包含感兴趣的区域,我有另一个名为users_data的表:

userid, country, ...
1,      a
2,      b
3,      a
4,      a

当我考虑这个问题时,我显然脑子已经死了,所以要包含语言,我首先在事件中加入users_data做了一个非常迂回的方式:

SELECT date(events.date), count(distinct events.userid) number_of_users, users_data.country
FROM events
JOIN users_data 
ON
users_data.userid = events.userid
WHERE date(events.dateday) > '2014-11-20' and date(events.dateday) < '2014-11-22'
AND trackevents.event LIKE '%%%%VIEW%%%%'
GROUP BY 
date(events.dateday), users_data.country
ORDER BY
date(events.date)

同样,我认为在一个月的范围内计算出来:

SELECT count(distinct events.userid) number_of_users, users_data.country
from events 
JOIN users_data 
ON
users_data.userid = events.userid
WHERE date(events.dateday) > '2014-10-01' and date(events.dateday) < '2014-11-01'
AND events.event LIKE '%%VIEW%%'
GROUP BY 
users_data.country

然后,我必须对使用过的Pandas进行排序,以打印出特定感兴趣的国家。

虽然这让我得到了答案,但这是非常愚蠢和耗时的。我知道有更好的方法去那里,但我现在有点难过。基本上我想得到类似于第一个类似于指定语言或语言的东西:

date,        daily, monthly, country
2014-11-01,  1239,  5123,    US 
2014-11-01,  439,   1123,    CA
2014-11-02,  1439,  5653,    US
2014-11-01,  402,   1224,    CA

如果需要,我更喜欢SQL语句,但是Pandas。此外,如果你注意到,如果有一个很好的方式来做第一个日期。我现在还在学习SQL,并且稍微超出了我的速度。

提前感谢您的帮助!

0 个答案:

没有答案