首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

教育行业案例:如何分析​复购用户?

请使用sql将购买记录表的信息,提取为下表(复购分析表)的格式。并用一条sql语句写出。...【解题思路】 这是常见的复购问题,也就是将用户购买时间分组,比较不同时间组的用户复购数。其本质是使用里了群组分析方法,将数据某些特征进行分类,分成不同的组进行分析。...当有“每个”出现的时候,要想到《猴子从零学会SQL》中讲过的用“分组汇总来”来实现。 每天分组(group by ),汇总购买用户数(计数函数count)。....* from 课程订单表 as a left join 课程订单表 as b on a.用户id = b.用户id; 把上面的联结结果记为临时表c,如何从临时表c查找出时间间隔(用户第二次购买时间-...第二十月复购用户数 此月复购用户数分析思路一样,只需要更改时间间隔=N个月即可。

1K10

时间问题,你会吗?

某店铺的商品信息表记录了有哪些商品 订单明细表记录了商品销售的流水;"订单明细表"的'商品ID' 与"商品信息表"的'商品ID'一一对应。...)根据间隔周数条件分组 1.计算当前日期与支付时间的相隔周数 设计到日期,要能想到《猴子从零学会SQL》里讲过的日期函数。...而更新表,需要使用update函数,SQL语法如下 update set = 用下面SQL就可以得到当前日期与支付时间的相隔周数 update 订单明细表...set 间隔周数 = (timestampdiff(WEEK,支付时间,NOW())); 查询结果: 2.根据间隔周数条件分组 可以使用case when 条件表达式,对间隔周数条件进行分组。...2)时间问题,要想到常用的日期函数(datedifftimestampdiff)来解决。

91320
您找到你想要的搜索结果了吗?
是的
没有找到

链家面试题:如何分析留存率?

该业务分析要求查询结果包括:日期(说明是每天来汇总数据)、用户活跃数、N日留存数、N日留存率。 1.每天的活跃用户数 先来看活跃用户数这一列如何分析出?...当有“每个”出现的时候,要想到《猴子 从零学会SQL》中讲过的用分组汇总来实现该业务问题。 每天(登陆时间分组(group by ),统计应用(相机)每天的活跃用户数(计数函数count)。...次日留存用户数 再来看查询结果的次日留存用户数 次日留存用户数:今日登录,明天也有登录的用户数。也就是时间间隔=1。...时间间隔from c)group by a.登陆时间; 将临时表c的sql代入上面就得到了查询结果如下: 3.次日留存率 留存率=新增用户登录用户数/新增用户数,所以次日留存率=次日留存用户数/当日用户活跃数...,七日留存率 次日留存用户数,次日留存率分析思路一样,只需要更改时间间隔=N(日留存)即可。

3K10

一篇文章带你深入理解FlinkSQL的窗口

前言 时间语义,要配合窗口操作才能发挥作用。最主要的用途,当然就是开窗口、根据时间段做计算了。下面我们就来看看 Table API SQL ,怎么利用时间字段做窗口操作。... Table API SQL ,主要有两种窗口:Group Windows Over Windows(时间语义的文章推荐) ?...一、分组窗口(Group Windows) 分组窗口(Group Windows)会根据时间或行计数间隔,将行聚合到有限的组(Group),并对每个组的数据执行一次聚合函数。...1.1 滚动窗口 滚动窗口(Tumbling windows)要用 Tumble 类来定义,另外还有三个方法: over:定义窗口长度 on:用来分组(按时间间隔)或者排序(行数)的时间字段...1.3 会话窗口 会话窗口(Session windows)要用 Session 类来定义,另外还有三个方法: withGap:会话时间间隔 on:用来分组(按时间间隔)或者排序(行数)

1.9K30

Flink重点难点:Flink Table&SQL必知必会(二)

Table APISQL,主要有两种窗口:Group WindowsOver Windows 1.1 分组窗口 分组窗口(Group Windows)会根据时间或行计数间隔,将行聚合到有限的组(...1.2 滚动窗口 滚动窗口(Tumbling windows)要用Tumble类来定义,另外还有三个方法: over:定义窗口长度 on:用来分组(按时间间隔)或者排序(行数)的时间字段 as:别名,...(按时间间隔)或者排序(行数)的时间字段 as:别名,必须出现在后面的groupBy 代码如下: // Sliding Event-time Window .window(Slide over 10...on:用来分组(按时间间隔)或者排序(行数)的时间字段 as:别名,必须出现在后面的groupBy 代码如下: // Session Event-time Window .window(Session...as $"w") 3 SQL窗口的定义 我们已经了解了Table API里window的调用方式,同样,我们也可以SQL中直接加入窗口的定义使用。

1.8K10

Grafana中使用Global Variables

在前一篇已经提到过了Variables的使用,Grafana提供的Variables方式能够自由的切换数据进行展现。...时间范围变量 Grafana筛选时间的范围可以直接在右上角进行筛选,但是可能我们实现某个需求的时候需要用到当前页的开始与结束时间。那么就可以用到时间范围变量。...间隔变量 进行图表展现时,我们选择每分钟的最大在线人数。展现一个小时有60个点。但是如果要展现3天的话就需要4320个点。7天的话可能更多。...通过较大的时间间隔来进行分组能够提高查询效率,如果点数多于图表上的话图表上也无法展示。例如,7天的时候我们可能希望能够按照小时进行分组。...timeFilter timeFilter实现时间表达式的生成,例如我们直接使用SQL的时候就可以看到该变量与生成的结果。 ?

3.9K20

使用Kafka SQL Windowing进行自定义分区分析

这些数据包含诸如行程持续时间,开始时间,停止时间,站台名称,站台ID,站台纬度站台经度等基本信息。...由此可以看出在每个给定的时间间隔内所开始的行程都被记录了下来。 使用Window Session执行流式分析 Window session,数据被分组特定的Session。...当数据20秒的时间间隔内不可用时,就会开始一个新的Session来进行数据分组。 例如00:01:09到00:01:57之间的时间间隔。...00:01:0900:01:33之间的时间间隔内,您可以查看20秒或者更长的时间间隔内的内容。由此可以看出行程的数量增加。...使用Window Hopping执行流分析 Window Hopping,通过前进给定的时间间隔,将数据给定的时间间隔分组到重叠的窗口中。

1.7K40

sql server中部分函数功能详解

ROW_NUMBER()OVER()函数 ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)表示根据COL1分组分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号...7.HAVING 子句 SQL 增加 HAVING 子句原因是WHERE 关键字无法与合计函数一起使用。...15. dateadd() 定义用法 DATEADD() 函数日期中添加或减去指定的时间间隔。 语法 DATEADD(datepart,number,date) date 参数是合法的日期表达式。...number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。...微妙 mcs 纳秒 ns 17. charindex() substring() SQL CHARINDEX 函数返回字符或者字符串另一个字符串的起始位置 CHARINDEX 函数调用方法如下:

1.5K30

Flink学习笔记(9)-Table API Flink SQL

image.png 八、时间特性   基于时间的操作(比如 Table API SQL 窗口操作),需要定义相关的时间语义时间数据来源的信息   Table 可以提供一个逻辑上的时间字段,用于表处理程序...,要配合窗口操作才能发挥作用    Table API SQL ,主要有两种窗口 Group Windows(分组窗口)   根据时间或行计数间隔,将行聚合到有限的组(Group),并对每个组的数据执行一次聚合函数...9.1.1 滚动窗口   滚动窗口(Tumbling windows)要用Tumble类来定义,另外还有三个方法:   over:定义窗口长度   on:用来分组(按时间间隔)或者排序(行数)的时间字段...(按时间间隔)或者排序(行数)的时间字段    as:别名,必须出现在后面的groupBy // Sliding Event-time Window .window(Slide over 10.minutes...   on:用来分组(按时间间隔)或者排序(行数)的时间字段    as:别名,必须出现在后面的groupBy 代码如下: // Session Event-time Window .window

2.1K10

Spark的StreamingSpark的SQL简单入门学习

每个RDD含有一段时间间隔内的数据,如下图: ? 对数据的操作也是按照RDD为单位来进行的: ? 计算过程由Spark engine来完成 ?...3.2、DStream相关操作:   DStream上的原语与RDD的类似,分为Transformations(转换)Output Operations(输出)两种,此外转换操作还有一些比较特殊的原语...3.Window Operations Window Operations有点类似于Storm的State,可以设置窗口的大小滑动窗口的间隔来动态的获取当前Steaming的允许状态 ?   ...Spark SQLSQLContext是创建DataFrames执行SQL的入口,spark-1.5.2已经内置了一个sqlContext: 1.本地创建一个文件,有三列,分别是id、name...personDF("name"), personDF("age") + 1).show //过滤age大于等于18的 personDF.filter(col("age") >= 18).show //年龄进行分组并统计相同年龄的人数

92590

高性能MySQL(二):服务器性能剖析

有两种情况会导致不合适的测量: 错误的时间启动停止测量 测量的是聚合后的信息,而不是目标活动本身 完成一项任务所需要的时间可以分成两部分:执行时间等待时间。...,结果总执行时间从大到小排列 # Profile # Rank Query ID Response time Calls R/Call V/M It...pct:表示该分组语句(这里指上述代码段“Query 1”代表的分组语句,具体的语 句样本EXPLAIN ...关键字下面有输出。...注意,该语句不 是随机生成的,而是分组语句中最差的查询SQL语句) ---- 优秀资料 参考资料来源:Mysql性能瓶颈深度定位分析 我们性能测试过程,经常会遇到Mysql出现性能瓶颈的情况,对于数据库来说...慢SQL定位分析 首先业务系统慢,肯定是体现在响应时间上,所以性能测试,如果发现慢我们就从响应时间上进行拆分,最后拆到mysql,那就是分析慢SQL,同样如果在高并发时发现mysql进程占CPU很高

73820

计算机三级网络技术【知识合集】2022.7.18

RPR环限制数据帧只源节点目的节点之间的光纤段上传输。 RPR采用自愈环设计思路,能在50ms(不是30ms时间内隔离故障结点光纤段。...A、RPR环能够30ms内实现自愈 B、RPR环中,源节点向目的节点成功发出的数据帧要由源节点从环中收回 C、两个RPR节点之间的裸光纤最大长度可以达到100公里 D、RPR的内环用于传输数据分组,...外环用于传输控制分组 答案:C 解析:弹性分组环(RPR)采用自愈环设计思路,能在50ms时间内,隔离出现故障的结点光纤段,提供SDH级的快速保护恢复。...A、RPR能够50ms内隔离出现故障的节点光纤段 B、两个RPR节点之间的裸光纤最大长度为10公里 C、RPR的内环与外环都可以传输数据分组与控制分组 D、RPR环中每—个节点都执行SRP公平算法...答案:B 解析∶RPR采用自愈环的设计思想,能够50ms时间内,隔离出现故障的结点光纤段,RPR环中每一个结点都执行SRP公平算法,两个RPR结点之间的裸光纤最大长度为100km,RPR的内环与外环都可以传输数据分组与控制分组

28212

MySQL Slow Sql优化(面向研发)

一、获取慢日志 1、即时慢日志:只发送一次 2、订阅慢日志:周期定时发送,添加定时任务 3、报警触发推送慢日志邮件 二、准备工作 1、慢日志切割脚本,取出指定时间段的慢日志 2、监控报警触发脚本...Rank:所有语句的排名,默认查询时间降序排列,通过--order-by指定 Query ID:语句的ID,(去掉多余空格和文本字符,计算hash值) Response:总的响应时间 time:该查询本次分析总的时间占比...ID:查询的ID号,上图的Query ID对应 Databases:数据库名 Users:各个用户执行的次数(占比) Query_time distribution :查询时间分布, 长短体现区间占比...Tables:查询涉及到的表 Explain:SQL语句 四、SQL优化利器—explain使用 explain模拟优化器执行SQL语句,5.6以及以后的版本,除过select,其他比如insert...常见于排序order by分组查询group by。 --Using index:表示相应的select操作用使用覆盖索引,避免访问了表的数据行。

1.8K31

腾讯面试题:你今天上班打卡了吗?

翻译成大白话就是,找出当天签到的用户,每个用户最近一次未签到的日期,计算从上一次未签到日期到当天的间隔天数(这段时间内,该用户每天签到)。...该问题是分组排序问题,这类问题要想到《猴子 从零学会SQL》里讲过的窗口函数。 先按用户id分组,找出每个用户id当天未签到的日期,再按日期降序排序。...我们可以查询用户签到表的开始日期,将那天作为该用户开始签到的日期,计算该日期当天的间隔,然后加1,即为该用户的连续签到天数。...根据上文描述知道,有的用户每天都签到,表b,该用户不存在。因此以用户id关联两个表时,若在表b中用户id关联不到时,使用用户签到表的开始日期,计算连续签到天数。...对应SQL如下: image.png  查询结果: image.png 【本题考点】 遇到要取出每个分组(用户/部门/月份),某个字段的值最高/最低/处于第n个的记录,也就是分组排序问题,要想到用窗口函数

67000

hystrix降级初步学习

当我们监控时,相同分组的服务会聚合在一起,必填选项。...Hystrix相关配置: hystrix.command.defaulthystrix.threadpool.default的default为默认CommandKey Command Properties...理论上选择semaphore size的原则选择thread size一致,但选用semaphore时每次执行的单元要比较小且执行速度快(ms级别),否则的话应该用thread。...默认100 hystrix.command.default.metrics.healthSnapshot.intervalInMilliseconds 记录health 快照(用来统计成功错误绿)的间隔...+ 缓存值) 比如:每秒能处理1000个请求,99%的请求响应时间是60ms,那么公式是: 1000 (0.060+0.012) 基本得原则时保持线程池尽可能小,他主要是为了释放压力,防止资源被阻塞

66320

使用pt-query-digest分析mysql慢日志

Query ID:语句的ID Response:总的响应时间 time:该查询本次分析总的时间占比 calls:执行次数,即本次分析总共有多少条这种类型的查询语句 R/Call:平均每次执行的响应时间...,这个响应时间是很短的,几乎都在1s之内,道理不会出现在慢查询日志上面。...之所以这些执行时间1s之内的SQL语句会出现在慢查询日志上面,是因为mysql开启了一个参数,如下: mysql> show variables like '%index%'; +---------...ID:查询的ID号,上图的Query ID对应 Databases:数据库名 Users:各个用户执行的次数(占比) Query_time distribution :查询时间分布, 长短体现区间占比...SQL的执行时间比较长,如果表的数据量很大的话,这无疑是一个慢SQL.

2K10

SQL之收集SQL Server线程等待信息

要知道线程等待时间是制约SQL Server效率的重要原因,这一个随笔中将学习怎样收集SQL Server的线程等待时间,类型等信息,这些信息是进行数据库优化的依据。...新建线程等待信息表 如果想得到连续的信息,固定时间间隔内收集信息比如一个小时一次,这样就可以分析系统分配的等待时间,识别出繁忙时间段。这里我们将这些信息收集到一个数据表中保存并进行分析。...新建job界面,General标签填写job名称,描述,如图2 ?...收集等待信息数据 过一段时间之后表WaitStats中就会有一些数据,每隔5分钟就会在这个表写入一些数据,这些数据会不断的增加。...但是这些并不明显,先写到这里,下一个随笔我将在EXECL把这些数据制作成一个直方图或者连线图,横轴是时间,纵轴是等待间隔时间

1.1K70

​Top99 超时排查思路

50ms 左右,监控报警主要用的 Prometheus + Grafana + 自研报警平台 报警 晚上小伙伴们出去吃饭了,突然收到了报警,一个工程的 top99 超过了 200 ms,持续时间大于了...排查 我们的业务指标监控用的 Prometheus,工程埋点,数据收集到 Prometheus,然后 Grafana 展示,目前只是显示了集群的 Top90、Top99、Top999 指标...排序后的Top999 原来他将 Top999 实例分组,并将值倒序排序了,发现确实只有很小一部分节点出了问题,然后就留了一个节点保留现场用于排查,将剩余超时的节点重启了,随后 Top999 就降下来了...后面通过排查保留现场的那个节点,发现是服务初始化时,调用一个依赖服务超时了,然后有问题的节点就一直超时了,这个主要是因为上线时并行上线的节点数比较多,且间隔时间有点短,对依赖服务方造成了压力 反思...然后就顺藤摸瓜,实例分组展示指标,并做排序找到有问题的节点,然后有针对性的处理排查 虽然问题解决了,但同事 Grafana 上操作了什么我不得而知,确实有冲动想问他那个语句怎么写的,但都被自己打住了

65130

.NET如何实现高精度定时器

.NET中有多少种定时器一文介绍过.NET至少有6种定时器,但精度都不是特别高,一般15ms~55ms之间。一些特殊场景,可能需要高精度的定时器,这就需要我们自己实现了。...硬件计时器由三个部分组成:时钟周期生成器、计数时钟周期的计数器检索计数器值的方法。...它是winmm.dll的函数,稳定性精度都比较高,能提供1ms的精度。 官方文档说timeSetEvent是一个过时的方法,建议使用CreateTimerQueueTimer替代[3]。...固定等待时间:不管任务执行时长,每次任务执行结束到下一次任务开始执行间的等待时间固定。 假定时间间隔为10ms,任务执行的时间7~11ms之间,下图中显示了三种触发模式的区别。...之所以这里没有提及这种模式,是因为高精度定时场景,执行任务的时间开销很有可能大于定时器的时间间隔,如果开启新线程执行定时任务,可能会占用大量线程,这个需要结合实际情况考虑如何执行定时任务。

21610
领券