前言
最近一直有同学咨询踏踏实实练SQL的事情,今天给孟哥给大家打来两道经典的SQL题目,让同学们午饭吃的更香。
孟哥介绍
前字节跳动高级开发,军工企业数仓某线负责人,曾面试过上百人,看过2000余份简历。
作为资深面试官,孟哥常提及SQL的重要性,下面将通过两道SQL的讲解,帮助大家更好的理解题目的含义,更好的在实际生产场景中实践起来。
第一题:求连续登录的最多天数的用户
基础数据:

思路讲解:
-
第一步应该保证数据的唯一,即对date字段进行截取到日后,再对uid和登陆日期进行去重 -
第二步我们需要思考如何得到用户连续登录的开始日期,那么我们可以采取下列方式:
❝对于登录日期按照用户进行排序,排完序后对登陆日期和排序号进行相减,得到一个新的日期。对用户和新的日期进行分组聚合,得到用户和新的日期分别为多少天。
-
此时可以对聚合后的数据去进行order by,取第一位最大的,也可以对天数去取排序。(此时需要格外注意的问题:如果出现重复的最大值,需要如何处理,一定要提前问好 面试官。)

常见场景
-
会员连续缴费 -
用户连续有相对应的行为等
第二题:某平台七日留存计算
基础数据:

思路讲解:
用户七日留存,只要是牵扯到多日留存的问题,第一步永远是确认口径,七日留存可以分为以下四种表现:
-
用户今日登录,在未来七日的留存情况
❝只需要把今日登录的用户和未来七天登录的用户的去重集合,取交集便可,取完交集再除以今日登录的用户数便为留存率
-
用户今日登录,在未来第七日的留存情况
❝只需要把今日登录的用户和未来第七天登录的用户的去重集合,取交集便可,取完交集再除以今日登录的用户数便为留存率
-
用户在包含今天在内的过去七天登录,在未来七日的留存情况
❝同样是取交集
-
用户在包含今天在内的过去七天登录,在未来第七日的留存情况
❝同上
-
取今日在内的自然周登录用户数据,在下一个自然周的留存情况
重难点:
-
可以看出,其实求口径并不难,难的是口径主要如何确定。 -
口径确认除了七日和第七日的处理外,还有七日和自然周的区别,还有的会牵扯到周同比,周环比。
使用场景:
-
留存往往会结合具体的行为,特定的场景出现,如我们踏踏实实学sql中的商品复购问题。 -
留存也会考虑到用户一直登录的情况,一直登录其实也可以理解为是一直留存。
写在最后
如果你喜欢这个系列,请在文末留言点赞收藏,感谢支持,你们的支持就是我们创作的最大动力。
本文由 mdnice 多平台发布