题目要求:计算用户的平均次日留存率 解题思路: 1)用户的平均次日留存率=用户次日不重复的回答人数/用户前一日不重复的回答人数 2)需要2个表,前一日回答问题表为主表,左连接次日回答问题表, 这样主表中有前一日回答问题的所有用户,左连接次日回答问题表,主表前一日日期再次日没回答的就是null 3)计算人数,使用count + distinct即可 select round(count(distinct qpd2.device_id,qpd2.date)/count(distinct qpd1.device_id,qpd1.date),4) as avg_ret from question_practice_detail qpd1 left join question_practice_detail qpd2 on qpd1.device_id=qpd2.device_id and qpd2.date =DATE_ADD(qpd1.date, INTERVAL 1 day) ; qpd2.date =DATE_ADD(qpd1.date, INTERVAL 1 day) 这限制语句表示,次日回答问题表的日期=前一日回答问题表的日期+1天 注意点,要同时对用户id和日期去重