也许你们能帮我做点什么。我做了两个查询来跟踪每天唯一的操作数和每月唯一的操作数。不过,我现在想看看不同地区的这些数字,但有问题。我知道这会涉及一些我还没有完全弄清楚的子查询。在
关于我正在使用的内容,我在pandas/python或R中使用Postgres进行查询,我很有信心只使用一个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
为了计算每日浏览量/每月浏览量,我目前做了如下操作:
^{pr2}$每月一次
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)
它返回一个表:
日期,日用户,月用户
现在要包括感兴趣的区域,我有另一个名为users\u data的表:
userid, country, ...
1, a
2, b
3, a
4, a
很明显,当我考虑这个问题的时候,我的大脑已经死了,所以为了包括语言,我做了一个非常迂回的方法,首先加入用户的事件数据:
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
然后我要把用过的熊猫分类,打印出一个特定的国家。在
虽然这让我得到了答案,但这是难以置信的愚蠢和耗时。我知道有更好的办法去那里,但我现在有点左右为难。基本上,我想得到与第一种语言相似的东西,无论是针对特定语言还是按语言:
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语句,但如果需要的话就用熊猫。如果你注意到了,有没有一个像第一次约会那样的好方法。我仍在学习SQL,现在我有点力不从心。在
提前感谢您的帮助!在
目前没有回答
相关问题 更多 >
编程相关推荐