联合查询
思路:当期登入用户与时间段后用户联合查询,找出都登入的用户,然后除以总用户数
1、建一个自增一天的用户表,date_add(date, interval 1 day),题解也有用自连接的;
2、对当天登入和几天后还有登入的用户去重计数;
3、总用户数,COUNT( DISTINCT lg.user_id)。
select
round(
(
select -- 第二天登入的用户
count( distinct lg.user_id)
from login lo
,(
select -- 建立一个自增日期用户表,把今天有登入的放到昨天,可以调整自增日期从而算几天后的登录率
user_id
,date_add(date, interval 1 day) date -- 自增一天
from login) lg
where lo.date = lg.date -- 联合查询,当天登入和几天后还有登入的用户
and lo.user_id = lg.user_id) /
count( distinct user_id) ,3) p -- 总用户,去重计数
from `login` ;