思路和注意点
1.找到每个玩家id对应的login时间,这里用min + group by,注意若不加group b只会输出一行,因为只有一个min
2.然后用1的表left join 原表,条件是id相同,但a.event_date 比login大一天,这里用到datediff, 前面减后面就是差
3.最后使用round取两位
4.中间的是a.event_date的出现频率,可以用avg(a.event_date is not null)表示将存在envet_date的表示1,其余0
src:
# Write your MySQL query statement below
# is not null就是1,找到1的平均值,就是频率
select round(avg(a.event_date is not null), 2) fraction
# 先找出每个用户id+首次登陆的信息, 然后左连接找满足条件的, a.event_date不能是空
from (select player_id, min(event_date) as login_day
from Activity
group by player_id) t left join Activity a
# group by 保证只有一个player_id 作为主键
# 不用group by只会输出一个min值
on t.player_id = a.player_id
and datediff(a.event_date, t.login_day) = 1
总结:
非常综合的一道题
考察了min,group,leftjoin,datediff,round,avg牛皮!