題目:(具體題目細節去看牛客,不能插入圖片)
牛客每天有很多人登錄,請你統計一下牛客新登錄用戶的次日成功的留存率,
有一個登錄(login)記錄表,簡況如下:
第1行表示id為2的用戶在2020-10-12使用了客戶端id為1的設備第一次新登錄了牛客網
。。。
第4行表示id為3的用戶在2020-10-12使用了客戶端id為2的設備登錄了牛客網
。。。
最后1行表示id為1的用戶在2020-10-14使用了客戶端id為2的設備登錄了牛客網
請你寫出一個sql語句查詢新登錄用戶次日成功的留存率,即第1天登陸之后,第2天再次登陸的概率,保存小數點后面3位(3位之后的四舍五入),上面的例子查詢結果如下:
查詢結果表明:
id為1的用戶在2020-10-12第一次新登錄了,在2020-10-13又登錄了,算是成功的留存
id為2的用戶在2020-10-12第一次新登錄了,在2020-10-13又登錄了,算是成功的留存
id為3的用戶在2020-10-12第一次新登錄了,在2020-10-13沒登錄了,算是失敗的留存
id為4的用戶在2020-10-13第一次新登錄了,在2020-10-14沒登錄了,算是失敗的留存
固次日成功的留存率為 2/4=0.5
(sqlite里查找某一天的后一天的用法是:date(yyyy-mm-dd, '+1 day'),四舍五入的函數為round,sqlite 1/2得到的不是0.5,得到的是0,只有1*1.0/2才會得到0.5)
代碼:
SELECT ROUND(COUNT(l1.user_id) * 1.0 / COUNT(l2.user_id), 3) AS p FROM (SELECT user_id, min(date) AS date FROM login GROUP BY user_id) AS l2 LEFT JOIN login AS l1 ON l1.user_id = l2.user_id AND l1.date = date(l2.date,'+1 day');