希望对用户群进行一些同期群分析。我们有 2 个表“users”(u.) 和“sessions”(s),其中用户有“created_at”字段, session 有“start_at”字段。
基本上,我要查看的是特定月份有多少用户注册,并分析其中有多少人在接下来的几个月又回来了。
澄清我想要得到的东西,以防我的解释不清楚。
Month: January
Registered users in January: 100
How many of this 100 registered users, logged in in February?: 97
How many of this 100 registered users, logged in in Mars?: 56
Month: February
Registered users in February: 70
How many of this 70 registered users, logged in in Mars?: 10
How many of this 70 registered users, logged in in April?: 32
等等……
我正在使用以下查询代码,请记住我的表日期是 UNIX 时间戳格式,这就是我使用 from_unixtime() 公式的原因。
select
Month(from_unixtime(up.registered_at)) as Month,
count(distinct up.id) registered,
count(DISTINCT (CASE WHEN datediff(from_unixtime(u.registered_at),from_unixtime(s.start_at)) <= 60 AND datediff(from_unixtime(u.registered_at),from_unixtime(s.start_at)) > 30 THEN u.id END)) as 30to60,
count(DISTINCT (CASE WHEN datediff(from_unixtime(u.registered_at),from_unixtime(s.start_at)) <= 90 AND datediff(from_unixtime(u.registered_at),from_unixtime(s.start_at)) > 60 THEN u.id END)) as 60to90
from users u
left join sessions s
on u.id=s.user_id
group by 1
limit 100
查询给了我不正确的数据,它说的是注册人数的确切数量,但没有说有多少人会在接下来的几个月里回来。
你能帮帮我吗,我相信这比我想象的要容易。
提前谢谢你。
最佳答案
我会设想这样的事情:
select date_format(from_unixtime(up.registered_at), '%Y-%m') as reg_yyyymm,
date_format(from_unixtime(s.start_at), '%Y-%m') as sess_yyyymm,
count(distinct u.id)
from users u left join
sessions s
on u.id = s.user_id
group by reg_yyyymm, sess_yyyymm;
这似乎给出了您描述的结果。
关于mysql - 每月队列分析 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36691688/