sql高频面试题-连续完成两个指定动作的用户统计

这篇具有很好参考价值的文章主要介绍了sql高频面试题-连续完成两个指定动作的用户统计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

   

用户行为分析

业务背景

某购物APP最近上线了一个新功能,用户签到后可以跳转到大转盘抽奖,抽奖获得的奖金可以抵消购物的费用,以此来培养用户使用app的习惯。

数据表介绍

现有一张用户行为表action_log,主要字段如下,记录了用户在app上的所有行为日志,即何人userid在何时action_time进行了什么操作action_name。


select 10001 userid ,'2023-08-01 00:32:33'  action_time , 'sign' action_name 
into #action_log
union all   
select 10001 userid ,'2023-08-01 00:32:38'  action_time , 'lottery' action_name 
union all   
select 10001 userid ,'2023-08-01 00:32:10'  action_time , 'login' action_name 
union all  
select 10001 userid ,'2023-08-01 01:20:12'  action_time , 'logout' action_name 
union all  
select 10002 userid ,'2023-08-01 15:32:33'  action_time , 'sign' action_name 
union all 
select 10002 userid ,'2023-08-01 15:32:38'  action_time , 'lottery' action_name 
union all   
select 10002 userid ,'2023-08-01 15:32:10'  action_time , 'login' action_name 
union all  
select 10002 userid ,'2023-08-01 15:20:12'  action_time , 'logout' action_name 
union all 
select 10002 userid ,'2023-08-01 15:32:35'  action_time , 'gift' action_name 
  
 select * from  #action_log

sql高频面试题-连续完成两个指定动作的用户统计,Sql,sql,数据库,sqlserver

需求:

统计每天签到之后并进行抽奖的用户数,注意签到和抽奖行为必须相邻(签到和抽奖行为对应的event_id分别为'sign','lottery')。

思路:

统计用户数时添加了限制:签到之后要大转盘抽奖,两个行为一前一后必须相邻才可以。这个时候我们可以用窗口函数的位移函数lead() over()实现,lead可以取当前记录的下一条记录,如果我们对每个用户userid分组,按照行为时间action_time升序排列,就可以得到一个用户的连续的行为记录,再用lead() 就可以得到下一条记录,从而在当前记录中得到下一条记录,对两个连续行为进行筛选,就可以计算满足这个条件的用户数。

代码:
 select  convert(varchar(10),action_time,120) day, count(distinct userid)  users
 from (
      select *,lead (action_name,1) over(partition by userid order by action_time ) next_aciton  
      from #action_log
)t
 where action_name ='sign' and next_aciton = 'lottery' 
 group by convert(varchar(10),action_time,120)

sql高频面试题-连续完成两个指定动作的用户统计,Sql,sql,数据库,sqlserver

细节点注意:这种查询方式可查询出两个连续动作跨天的用户,用户被统计在了第一个动作(即签到 “sign”)所属的日期中

lead() over 必须在sqlserver 2012版及以上执行文章来源地址https://www.toymoban.com/news/detail-639648.html

到了这里,关于sql高频面试题-连续完成两个指定动作的用户统计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL-01求连续七天登陆的用户

    2024年01月18日
    浏览(42)
  • 「SQL面试题库」 No_34 连续空余座位

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2023年04月22日
    浏览(62)
  • 【Hive SQL 每日一题】统计用户连续下单的日期区间

    测试数据 需求说明 统计用户连续下单的日期区间,所以连续的下单日期必须 = 2 ,例如: 2023-01-01,2023-01-02 。 分析步骤如下: 按 user_id 、 order_date 进行分组,同天的下单日期只保留一条。 使用 row_number 窗口函数对行号进行标记。 使用 date_sub 函数与行号标记进行运算,如果

    2024年02月09日
    浏览(35)
  • Python高频面试题——如何在字符串中删除指定字符,掌握strip()、replace()和re.sub ()正确使用方法!

    关于python删除字符串是面试python测试开发工程师的一个经典问题。问题很简单,但是一下子就能测试出来被面试者是否能够熟练的进行python相关编码工作! 对于有些临时抱佛脚的同学来讲,一看删除,很自然就说用remove 、del相关方法,听到这里,就知道面试者根本不知道这

    2024年02月08日
    浏览(47)
  • 「SQL面试题库」 No_88 找到连续区间的开始和结束数字

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2024年02月08日
    浏览(42)
  • 连续两个南航的研究生面试出了从来没出现过的问题,本科和研究生都是计算机专业的,竟然说static是不可更改的。

    最近面试人数有点多,面试有点频繁,因此发现了一些学生普遍会发生的错误,可以说是很离谱。 因为做了十多年的面试官,无论是大中小厂的面试,还是社招、校招。 从来没有遇到过这样的情况,而且发生在两个南航研究生的身上。 今天就分析下这两个研究生面试中的错

    2023年04月13日
    浏览(84)
  • 「SQL面试题库」 No_65 用户购买平台

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2024年02月05日
    浏览(35)
  • Hive SQL面试题-流失回流用户数统计

    根据用户最后一次登录记录表,统计每天的流失(一段时间未登录平台)用户数量,和回流用户(一段时间未登录平台,但今天重新登录了平台)数量。 执行环境:Hive on Spark 1 统计指标 从用户最后一次登录记录表中统计如下指标, 当日流失用户数量 、 当日回流用户数量

    2023年04月08日
    浏览(40)
  • 「SQL面试题库」 No_26 寻找用户推荐人

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2023年04月09日
    浏览(35)
  • 【Unity动画】动画混合树(BlendTree)无缝过渡+两个动作同时播放

    混合树的级别和一个动画片段一样,只不过混合树里面包含了多个动作。 双击Blend Tree 进去混合树的编辑界面  这里面可以添加很多个动作,然后选定一个之前设置好的任意一个参数作为控制变量。 这个参数只能选用Float类型!我前面就定义了一个float类型的变量,叫run。因

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包