本人因为sql很一般需求已用java代码解决,但十分好奇如何用sql解决这个问题。现在是三个表存储三种数据:
1.一个是注册的用户;
2.第二个是记录用户登录app的用户登录表(不累计,一个用户一天多次登录,有个记录登录次数的字段只统计1,每天至多有一个该用户数据);
3.最后一个和第二个差不多,只是会对登录次数递增;
需求一共有四个,只说一个最麻烦的吧,就是按一个以天为单位的日期范围,去查询以下数据:
1.总量:截至到天的注册总量;
2.当日新增的用户数量
3.次日留存率:昨日新增用户今日活跃数/昨日新增用户数
举例说明:假设 App 在1月3日的新增用户有100个,这100个用户在1月4日中启动应用的有55个,则1月3日的新增用户的次日留存率是55/100=55%
这个需求若是要纯用一个sql去实现应该怎么实现或是说一下思路也行,求big牛指教~~~
1.查询注册日期截止到昨天的用户数量
select count(*) from Users where time < '时间'
2.用户表肯定要有记录注册时间的字段吧,查询昨天截止时间到今天截止时间内的用户数量便是新增用户数量。
select count(*) from Users where time between '时间' and '时间'
3.根据你第二个表记录的登录次数就是用户启动应用的吧,第二个表中肯定要记录用户的ID吧,然后根据时间的条件,和登录用户的条件,利用子查询将第一个表中活跃的用户个数查询出来,在除以所有新增的用户个数就是了。
都能用一个sql求出来么,这些条件
@才小有: 可以的呀,前两个条件都是为第三个功能铺垫的