题目如下:
输入输出如下:
思路:
通过左连接,右边匹配不到的数据为null,这样可以通过avg()函数去取a.enent_date不是为null的平均值,再将平均值用round()函数取2位小数即可。
左表为这个用户player_id的最早登录时间,用group by player_id去聚集筛选出最早登录的日期。
右表为左表需要匹配到的数据,需要匹配player_id是相同的,即同一用户,以及登录时间是连续的,是最早登录时间的第二天的数据。
select round(avg(a.event_date is not null),2) fraction //取别名
from
(select player_id,min(event_date) event_date //左表数据
from Activity
group by player_id) t
left join Activity a
on t.player_id =a.player_id and t.event_date=a.event_date-1 //连接右表条件