题解 | #计算用户的平均次日留存率#
计算用户的平均次日留存率
https://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453
select case when count(q1.device_id) = 0 then null else (count(q2.device_id)/count(q1.device_id)) end as avg_ret from ( select distinct device_id, date from question_practice_detail ) as q1 left join ( select distinct device_id, date from question_practice_detail ) as q2 on q1.device_id = q2.device_id and q2.date = date_add(q1.date,interval 1 day)
次日留存,指同一用户在当天和第二天都刷题,不用过多思考什么第三天刷题什么的。
子查询两个相同的表格,按照第二个表格的日期是第一个表的日期之后一天进行连接,此处有空,注意使用left join
表示第二个表格日期是第一个表格日期后一天,即两天日期做差为1,q2.date=date_add(q1.date,interval 1 day)。
date_add函数用于将指定的日期值加到某一日期上
DATE_ADD(date, INTERVAL expr unit)
date是被加的日期,interval关键词,exper是日期数量,unit是单位(day,month,year)
例:将一年零三个月加到日期2000/09/27:
SELECT DATE_ADD('2000-09-27', INTERVAL 1 YEAR + 3 MONTH) AS new_date;