MySQL | DATE_ADD()函数
题1:
现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。
示例:question_practice_detail
id | device_id | quest_id | result | date |
1 | 2138 | 111 | wrong | 2021-05-03 |
2 | 3214 | 112 | wrong | 2021-05-09 |
3 | 3214 | 113 | wrong | 2021-06-15 |
4 | 6543 | 111 | right | 2021-08-13 |
5 | 2315 | 115 | right | 2021-08-13 |
6 | 2315 | 116 | right | 2021-08-14 |
7 | 2315 | 117 | wrong | 2021-08-15 |
…… |
根据示例,你的查询应返回以下结果:
avg_ret |
0.3000 |
思路分析:所谓次日留存,指的是同一用户(在本题中则为同一设备,即device_id)在当天和第二天都进行刷题,
而次日还会来刷题的概率=去重的数据表中符合次日留存的条目数目/去重的数据表中所有条目数目,所以这里需要查询这两个的数目。
这里使用到了DATE_ADD() 函数,可以巧妙的统计到后一天也刷题的个数。
select count(q2.device_id)/count(q1.device_id) 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)