我在面试时写了这个,面试官对我刮目相看

前言

最近一直有同学咨询踏踏实实练SQL的事情,今天给孟哥给大家打来两道经典的SQL题目,让同学们午饭吃的更香。

孟哥介绍

前字节跳动高级开发,军工企业数仓某线负责人,曾面试过上百人,看过2000余份简历。

作为资深面试官,孟哥常提及SQL的重要性,下面将通过两道SQL的讲解,帮助大家更好的理解题目的含义,更好的在实际生产场景中实践起来。

第一题:求连续登录的最多天数的用户

基础数据:

我在面试时写了这个,面试官对我刮目相看_第1张图片

思路讲解:

  1. 第一步应该保证数据的唯一,即对date字段进行截取到日后,再对uid和登陆日期进行去重
  2. 第二步我们需要思考如何得到用户连续登录的开始日期,那么我们可以采取下列方式:

对于登录日期按照用户进行排序,排完序后对登陆日期和排序号进行相减,得到一个新的日期。对用户和新的日期进行分组聚合,得到用户和新的日期分别为多少天。

  1. 此时可以对聚合后的数据去进行order by,取第一位最大的,也可以对天数去取排序。(此时需要格外注意的问题:如果出现重复的最大值,需要如何处理,一定要提前问好 面试官。)
我在面试时写了这个,面试官对我刮目相看_第2张图片

常见场景

  1. 会员连续缴费
  2. 用户连续有相对应的行为等

第二题:某平台七日留存计算

基础数据:

我在面试时写了这个,面试官对我刮目相看_第3张图片

思路讲解:

用户七日留存,只要是牵扯到多日留存的问题,第一步永远是确认口径,七日留存可以分为以下四种表现:

  1. 用户今日登录,在未来七日的留存情况

只需要把今日登录的用户和未来七天登录的用户的去重集合,取交集便可,取完交集再除以今日登录的用户数便为留存率

  1. 用户今日登录,在未来第七日的留存情况

只需要把今日登录的用户和未来第七天登录的用户的去重集合,取交集便可,取完交集再除以今日登录的用户数便为留存率

  1. 用户在包含今天在内的过去七天登录,在未来七日的留存情况

同样是取交集

  1. 用户在包含今天在内的过去七天登录,在未来第七日的留存情况

同上

  1. 取今日在内的自然周登录用户数据,在下一个自然周的留存情况

重难点:

  1. 可以看出,其实求口径并不难,难的是口径主要如何确定。
  2. 口径确认除了七日和第七日的处理外,还有七日和自然周的区别,还有的会牵扯到周同比,周环比。

使用场景:

  1. 留存往往会结合具体的行为,特定的场景出现,如我们踏踏实实学sql中的商品复购问题。
  2. 留存也会考虑到用户一直登录的情况,一直登录其实也可以理解为是一直留存。

写在最后

如果你喜欢这个系列,请在文末留言点赞收藏,感谢支持,你们的支持就是我们创作的最大动力。

本文由 mdnice 多平台发布

你可能感兴趣的:(程序人生)