如何解决计算谷歌大查询中的保留率或返回率
Date user
2021-02-03 08:35:07 UTC foo@abc.com
2021-02-03 08:35:07 UTC foo1@abc.com
2021-02-04 08:35:07 UTC foo2@abc.com
2021-02-05 08:35:07 UTC foo@abc.com
2021-02-03 08:35:07 UTC foo1@abc.com
2021-02-10 08:35:07 UTC foo@abc.com
2021-02-13 08:35:07 UTC foo1@abc.com
2021-02-18 08:35:07 UTC foo3@abc.com
2021-02-21 08:35:07 UTC foo2@abc.com
2021-02-23 08:35:07 UTC foo2@abc.com
2021-02-24 08:35:07 UTC foo5@abc.com
2021-02-24 08:35:07 UTC foo2@abc.com
我想在这里计算每日留存率。第一天玩的唯一玩家总数也在第二天和第三天玩过,依此类推。
假设一个游戏在第 0 天和第 0 天(如果有 10 个唯一用户玩)和在第 1 天(如果其中有 4 个玩)安装,那么第 1 天的留存率为 40%,依此类推。
所以,我想计算从第 1 天到现在的留存率。
输出将是:-
Day1 Day2 Day3........DayN
40% 50% 30% 70%
解决方法
要计算第 0 天和第 1 天之间的留存率,您可以使用 intersect
:
select
( select count(*)
from (
select user from mytable where date >= '2021-02-03 00:00:00' and date < '2021-02-04 00:00:00'
intersect distinct
select user from mytable where date >= '2021-02-04 00:00:00' and date < '2021-02-05 00:00:00'
)
) / count(distinct user)
from mytable where date >= '2021-02-03 00:00:00' and date < '2021-02-04 00:00:00'
要计算第 0 天和第 2 天之间的留存率:
select
( select count(*)
from (
select user from mytable where date >= '2021-02-03 00:00:00' and date < '2021-02-04 00:00:00'
intersect distinct
select user from mytable where date >= '2021-02-05 00:00:00' and date < '2021-02-06 00:00:00'
)
) / count(distinct user)
from mytable where date >= '2021-02-03 00:00:00' and date < '2021-02-04 00:00:00'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。