转眼开课大半个月了,目前勉强能跟上进度。
虽然很累,但也不知为啥,却有点乐在其中?可能是自己真心想学?或是课程真的不错?亦或是花了那么多钱,不想学也得想想钱?
记啥才好?自己其实并不擅长做笔记,无论是念书时课堂笔记,亦或是工作后会议纪要。课程讲义,估计比我的笔记还要清晰完整。
想了许久,当下决定先分享下本阶段作业的解题思路吧,也算是自我复习。
模块一部分作业
提供门店信息和门店销售信息两张表,格式如下:
表名:area_table
字段内容 字段名 字段类型 长度
店铺id store_id varchar 10
店铺位置 area varchar 20
店长id leader_id int
表名:store_table
字段内容 字段名 字段类型 长度
店铺id store_id varchar 10
订单id order_id varchar 12
销量 sales_volume int
销售日期 salesdate date
作业要求根据以上销售数据,进行统计与程序异常分析。
前两个问题,建表和统计每日各店铺各区域的销量相对比较简单。
可能要留意一下的地方就是gruop by和order by,分组和排序都是可以针对多个字段的。
第三个问题程序异常分析。问题为针对报表展示时,实际和预想展示效果有偏差。实际展示缺少销量为0的store3店铺数据。
检查代码
select
a.store_id ,
IFNULL(sum(sales_volume),0) as sales_volumes
from area_table a
left join store_table b
on a.store_id=b.store_id
where a.area=’alpha’ and b.salesdate=DATE_SUB(curdate(),INTERVAL 1 DAY)
GROUP BY a.store_id
order by a.store_id;
一番排查发现,注释掉代码段 where,可以查询出所有店铺时间段内的总销量数据。包括销量为 0 的店铺。推测问题出在 where 代码段。
观察代码段,两个逻辑中,筛选日期 store3 停业无数据。日期判断条件与异常问题相关,推测问题出在日期判断条件的位置。
尝试把日期判断条件放在 on 代码端中执行。能够得出期望结果。
推测代码语句中 where 判断和 on 判断的执行顺序不同导致问题,题目代码执行顺序。
(1)以左表 area_table 为准,左外连接并查询出所有店铺每日销售数据。
(2)筛选出区域为 alpha 且销售日期为对应日期的数据。
因为 store3 对应日期的销售数据为空,所以筛选时被直接筛去。
模块二部分作业
第一大题
提供用户活跃日期表,格式如下:
表名:temp_user_act
字段: 字段名 字段类型 字段说明
user_id int 用户id
dates date 活跃日期
计算留存数据。需要创建视图,步骤分解为:
1、自连接用户活跃日期表,连接方式使用左连接,连接字段使用用户ID,保留两表所有字段。
2、筛选出右表日期大于或等于左表日期的内容。
3、计算以左表日期为基准日的当日用户数,第二日、第三日、第四日、第八日回访用户数。
4、利用上述数据计算出每日的当日用户数以及次日留存率,二日留存率,三日留存率,七日留存率。
根据以上步骤拆解,得出结果基本没有难度。可能要留意一下第一步的自连接,意思就是同一张表同时为left jion的左表和右表。
第二个问题要求计算出每日次留与次留的周环比。
用偏移分析函数把当日次留与上周次留放在同一行之后,再次计算就可得出。
第二大题,作者活跃行为统计
提供作者发布视频统计表如下:
表名:temp_author_act
字段: 字段名 字段类型 字段说明
dates date 发布日期
author_id varchar(5) 作者id
第一小题,求时间内最大断更天数、平均断更天数和最大持续更新天数。
大致思路是:
1、先通过偏移分析函数把作者的当次登陆日期和上次登陆日期放在同一行查询结果。
2、然后计算出每次登陆和上次登陆的间隔时间。(间隔时间大于1天算断更,所以计算结果统一减去1)
3、最后group by作者ID进行分组,max计算出每组组内最大断更天数。
4、平均断更天数=断更总天数/断更次数。断更天数组内相加即可得出,断更次数通过count组内断更天数不为null且不为0的记录数。也可通过avg函数计算,需注意剔除null和0的记录数。
以上两个字段可以在同一个SQL中求出。
最大持续更新天数用到了我印象中课程里没有介绍的一个方法,定义变量。
我在这前后卡了两天,最后也是看导师的分享文档才知道怎样计算。具体方法:
1、先通过以上类似方法计算出作者每次登陆和上次登陆的间隔时间。
2、同个查询内加多一列变量赋值,@ss:=1
3、加多一层查询,查询时通过逻辑判断给变量赋新值,当间隔时间=1时@ss:=@ss+1,其他情况@ss:=1。如此计算出了连续更新的天数。
4、最后group by按作者ID分组之后,max出组内最大连续更新的天数。
第二小题,要求查出每位作者最大断更天数对应的时间范围。
方法很多,我将各作者最大断更天数的查询结果作为左表与各作者断更天数明细表进行左外连接,通过作者ID关联。即查询出对应的时间范围。