题解 | 计算用户的平均次日留存率

计算用户的平均次日留存率

https://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453

SELECT 
    COUNT(DISTINCT CONCAT(q2.device_id, '-', q2.date)) / COUNT(DISTINCT CONCAT(q1.device_id, '-', q1.date)) AS avg_ret
FROM 
    question_practice_detail AS q1
LEFT OUTER JOIN 
    question_practice_detail AS q2
ON 
    q1.device_id = q2.device_id AND DATEDIFF(q2.date, q1.date) = 1;
    

使用 LEFT OUTER JOIN 意味着即使 q1 表中的某些记录在 q2 表中没有对应的次日记录(也就是用户在次日没有答题),这些记录也会被保留在结果集中,q2 表对应的字段会显示为 NULL

区别:

LEFT JOIN(也称为 LEFT OUTER JOIN:以左表为基础,返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有与左表匹配的记录,那么右表的相关列将显示为 NULL

INNER JOIN:只返回两个表中匹配的记录,即只有当左表和右表中的记录满足连接条件时,才会出现在结果集中。

全部评论

相关推荐

八极星:有什么不能问的,(/_\),这又不是多珍贵的机会,你有什么可失去的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务