将笔者在公司实习数据分析过程中,将感受、反思、踩坑综合起来的零碎笔记总结成系统的文章,其中不足,望多多指正。
刚来公司实习数据分析,读了一周的技术文档、了解代码规范,那时信心挺饱和;就满怀信心的觉得自己下周就可以和漂亮可爱温柔的业务运营小姐姐对接需求了。
而真正到了第二周时,也没几天这一见到业务小姐姐就心跳加速,小鹿乱撞,无比紧张,因为每次小姐姐提出的业务报表需求总那么令我胆战心惊。
在此对于这周常用的SQL知识做一些总结,同时思考业务。
常用的多表查询知识
join相关子句
借用多表查询问题所览知识(图给的很形象),多表查询的主要的使用查询可以通过下图进行理解熟记:
同时上述内连接的查询,也可以用inner join代替使用,具体可见链接文章
case when使用
这里需要重点理解的一个其标椎用法:
CASE WHEN SCORE = '字段' THEN '字段'
WHEN SCORE = '字段' THEN '字段'
WHEN SCORE = '字段' THEN '中' ELSE '字段' END
一般在业务中可以有比较多的应用场景会用到case when:
- 需要将字段的进行区间划分;
- 统计结果;
- 行转列
- 实现子查询功能
具体的使用案例课件文章链接
子查询
如何用SQL满足业务需求
在掌握SQL同时,也必需要理解熟悉业务,才能使用SQL做出业务方满意的表。想要做到这几点需要:
- 熟悉常用业务表组成;
- 熟悉常用的SQL使用语句,笔者开始主要使用的是多表查询;
- 会将业务的需求进行拆分落实成一张张现实的表。
以笔者的电商业务为例:如业务提出需求:前几天的优惠活动需要复盘,请帮我拉出xx号-xx号的未购买过xx商品得到xx年龄宝宝的老客月活妈妈id;
分析三步走:
(1)首先考虑要从那几表中拿出哪些字段:
要拿出老客id还是优惠活动未购买xx产品的,那我应该拿的表时优惠活动那几天的订单流水表+总的用户流水表
(2)考虑取数条件(拆分业务需求,将业务问题转换为数据问题)
条件(1)首先是日期ds锁定;
条件(2)在购买日没发生购买行为(即全选表用户id减去优惠活动的购买商品的用户id);
条件(3)用户是妈妈(定位用户类型);
条件(4)用户是月活(近一月发生过登入行为);
条件(5)用户宝宝有年龄限制(将年龄转化成天龄);
(3)将由业务需求转化而来的数据问题通过SQL实现:
SELECT a.用户id
FROM (
SELECT DISTINCT 用户id
FROM 用户表
WHERE ds = 日期
AND 条件(3) --妈妈
AND 年龄限制
AND 年龄限制 --生日限制3年天数0-365*3
AND 最近登入天数 > 0 --月活
AND 购买次数 = 1 --老客
) a
LEFT OUTER JOIN ( --活动期间有过购买行为
SELECT DISTINCT uid
FROM 购买行为表
WHERE 购买时间(支付时间内)约束
AND 购买时间(支付时间内)约束 --优惠期间购买了东西
) b
ON a.用户id = b.用户id
WHERE b.uid IS NULL --使用约束实现a表id减去b表id
;
写在后面
纸上得来终觉浅,欲知此事须躬行 。 通过半月的实习,笔者慢慢觉得,数分师是需要一类技术与业务并行的职业,这期间不仅需要在学校锻炼的技术技能,更需要落实到具体的业务中,让自己的技术得到落地,满足业务产出结果,并能在后期在业务层面形成自己的思考,与业务方一同利用数据驱动业务的更快更好的发展。