题目:作为牛客网的数据分析师,现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请取出相应数据。
date_sub(expr1,expr2):从日期减去指定的时间间隔。
expr1为需要计算的字段名,expr2为需要计算的值,如interval 1 day;
因为表格中用户ID可能存在重复,所以在表格自连接之前先对字段去重筛选,即 select distinct device_id,date from 表格,之后再进行自连接;
题中计算的为留存率,即次日的用户数/今日的用户数,因此需用到左自连接。
SELECT COUNT(qpd1.device_id)/ COUNT(qpd.device_id) avg_ret
FROM(
SELECT DISTINCT device_id,date
FROM question_practice_detail
) qpd
LEFT JOIN (
SELECT DISTINCT device_id,date_sub(date,INTERVAL 1 DAY) date
FROM question_practice_detail
) qpd1 #次日的
USING(device_id,date) #using关键字简化连接
#或者写成on qpd.device_id=qpd1.device_id and qpd.date=qpd1.date