题解 | #牛客每个人最近的登录日期(五)#
牛客每个人最近的登录日期(五)
http://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8
登录表join
(子查询出用户第一次登录日期)
再join 第一次登录后 第二天登录
最后 groupby 日期后
数新用户第二天登录不为None的 除以是当日首次登录的
注意要处理分母-当日首次登录用户数 为0的情况,用case when处理了
因为当日首次登录用户为0 那么对应的新用户第二天登录也为0
所以 当日首次登录用户数改成1 就能直接÷了
select
l.date,
round(count(l2.date)/
(case count(fst_log_tbl.first_date)
when 0 then 1
else count(fst_log_tbl.first_date) end),3) p
from login l
left JOIN
-- first login table
(select user_id,
min(date) as first_date
from login
group by user_id) fst_log_tbl
on l.user_id=fst_log_tbl.user_id
and l.date = fst_log_tbl.first_date
left JOIN
login l2
on l.user_id=l2.user_id
and date_add(fst_log_tbl.first_date,INTERVAL 1 day) = l2.date
group by l.date
order by l.date; 