【发布时间】:2019-09-13 05:57:16
【问题描述】:
我正在对网站订阅者的活动进行一些研究。具体来说,我想查看 2018 年每个订阅者每天的平均点击次数。不幸的是,提供给我的数据表没有考虑订阅者根本不参与网站的天数,但我需要零-天数。
如果我以如下内容开始查询:
SELECT SubscriberID, date_trunc('Day', Date_of_Activity), count(*) as Clicks
FROM WSD.Clicks
WHERE Date_Of_Activity between date('2018-01-01') and date('2019-01-01')
GROUP BY 1,2
...如果每个订阅者在该日期发生了确认的点击,他们将只有一个特定日历日的条目;否则,源数据中不会生成任何行。这会导致平均通胀,因为它只考虑活跃的潜艇;一个人一年中有一天使用该网站并点击 2 次现在相当于一个人一年中使用该网站 300 天每天点击两次。如何让查询为每个订阅者声明一个日历日,并在他们实际上没有记录活动的情况下赋予“0”值?
仅供参考,此表只有几列:
SubscriberID(字符串)、Date_of_Activity(时间戳)、Type_of_Activity (字符串)
我正在 Athena (AWS) 中查询数据。
【问题讨论】:
-
我建议创建一个表(可能一个临时表是有意义的)。用您想要的范围内的日期填充它。然后将其与生成所有用户的子查询相结合。获取该结果并将其连接到数据并计算行数。
-
创建日历表,然后添加加入并计算每日订阅
-
请注意,BETWEEN 条件包括两条边,因此您的查询还包括 2019 年 1 月 1 日发生的点击
标签: sql amazon-athena presto