一、题目描述

二、数据构建
drop table if exists login;
CREATE TABLE `login` (
`id` int(4) NOT NULL,
`user_id` int(4) NOT NULL,
`client_id` int(4) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id`));
INSERT INTO login VALUES
(1,2,1,'2020-10-12'),
(2,3,2,'2020-10-12'),
(3,1,2,'2020-10-12'),
(4,2,2,'2020-10-13'),
(5,1,2,'2020-10-13'),
(6,3,1,'2020-10-14'),
(7,4,1,'2020-10-14'),
(8,4,1,'2020-10-15');
三、题目答案
select a.date,
case when sum(case when b.user_id is null then 0 else 1 end) =0 then 0
else ifnull(round(sum(case when c.user_id is null then 0 else 1 end)/sum(case when b.user_id is null then 0 else 1 end),3),0)
end as p
from login a
left join (select min(date) as date,user_id from login
group by user_id) b on a.user_id = b.user_id and a.date = b.date
left join login c on b.user_id = c.user_id and c.date = adddate(b.date,INTERVAL 1 DAY)
group by a.date;
四、答案讲解
(select min(date) as date,user_id from login
group by user_id
求出每个用户的第一次登陆日期
left login c on b.user_id = c.user_id and c.date = adddate(b.date,INTERVAL 1 DAY)
用第一次登陆日期的user_id 自关联一次 ,关联条件为 b.user_id = c.user_id 且 第二天有登陆。
然后再统计第一次登陆人数,与第二天登陆人数就可以了。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




