这道题,贵为困难题,自然是,正常做必有坑:我有一种方法一直不通关

错误写法:
select	count(distinct b.device_id)/count(distinct a.device_id) as avg_ret
from	question_practice_detail a
left join	question_practice_detail b
on	date_add(a.date,interval 1 day)=b.date	and		a.device_id=b.device_id;

正确写法:
select	count(distinct b.device_id,b.date)/count(distinct a.device_id,a.date) as avg_ret
from	question_practice_detail a
left join	question_practice_detail b
on	date_add(a.date,interval 1 day)=b.date	and		a.device_id=b.device_id;

两者最大的区别在于第3行与第8行
经反思与思考,之所以错,是应为b是一个新表,
如果仅用b.device_id的话,相当于仅有第一个条件a.device_id=b.device_id;成立,而date_add(a.date,interval 1 day)=b.date不成立,
唯有将id与日期全部绑定,才能,让两个条件同时生效。
并且,count本身并不能实现多列,但是distinct能将多列变成一个组。故-就能用count查询了
!!!之所以,将date与id关联,是应为,同一个用户,在其他日期还会刷题,不能因此就粗心的用distinct把用户给去除了
	所以本题重点,就是将 id与date关联起来,一起判断。