多表查询和嵌套查询问题和解决⽅法、⼼得体会、意见与建议_数据分析中的SQL如何解决业务问题?...
本⽂来⾃知乎问题:
数据分析⼈员需要掌握sql到什么程度?
作为专注数据分析结论/项⽬在业务落地以实现增长的分析师,建议在开始学习新技能前,先明确应⽤场景。有的放⽮才能不枉费努⼒。
翻译过来就是:先了解与SQL相关的数据分析⼯作有哪些?有了⽬标,才能知道需要准备什么知识来应对。
按我⽬前与SQL相关的⼯作内容,为你提供以下参考:
(⾷⽤说明:根据以下场景,选择需要重点学习的知识点)
(星标根据使⽤频率标记,⽽⾮重要性)
SQL应⽤场景及必备知识:
数据查询 ★★★
业务场景
也就是常说的“提数”。多表left join
实际⼯作场景中,如果向IT提提数需求,⼀般都需要沟通+排期,所以最有效率的建议就是⾃⼰会从数据库⾥提数
数据分析师除了⾃⾝的分析⼯作外,有时(甚⾄是经常)还需要应付产品、运营等部门同事的提数需求
必备知识
> 简单查询
即最简单的关键字组合SELECT +FROM+ WHERE (+BETWEEN, +IN) 是SQL查询的地基
此简单查询可以应对部分提数需求,例如运营想查看某段时间订单
> 多表查询
即INNER JOIN、LEFT JOIN 等联结关键字
想象中的取数可能是直接在某个表SELECT想要的字段?NO! 实际上为了查询效率,数据会散落到数据库的各个⾓落,例如想要了解⼀笔订单情况,信息存在这些表中:订单流⽔表、订单详情表、商品详情表、门店表、会员表等。
该部分知识的关键在于【明确业务分析需求→选择合适的联结⽅式】
数据更新 ★★☆
业务场景
即题主所说的“增删改”
该场景之所以仅两星的原因,是实际⼯作中,数据库运维部门给到我们数据分析师的数据库账号多半是只读权限,也就⽆法去“增删改”;此外,还有数据管控的原因
所以此场景可能更多在于⾃建数据库中,如在电脑上新建虚拟机搭建数据库服务器,导⼊数据后⽅便进⾏下⼀步分析
必备知识
> 数据库与表的创建、删除和更新
该部分知识点关键在于【字段类型的设置】要符合后续分析需求,如订单商品数量就要设成数值类型、订单⽇期设成⽇期类型等。(因为见过都设成字符类型的表,所以就简单提⼀下)
分析数据 ★★★
业务场景
该部分可谓是数据分析师的核⼼⼯作
⾯对复杂的业务问题,重点在于将其拆解、转译成简单的SQL问题
【案例】例如教育⾏业中某领导要求你“分析某课程的效果如何”→ 翻译:课程效果可通过学⽣成绩反映,即是要计算成绩最⼤值、最⼩值、学⽣成绩分布 → SQL语句
必备知识
> 汇总分析
即GROUP BY关键字
解决业务问题:如计算每个课程学⽣的平均成绩 → SELECT avg(成绩) FROM 成绩表 GROUP BY 课程
> 复杂查询
如嵌套⼦查询、标量⼦查询、关联⼦查询
可应对更复杂的业务问题:如出每个课程最⾼分的学⽣ → 需要按课程分组后到最⾼成绩记录,可以应⽤关联⼦查询 → SELECT 学⽣名字 FROM 成绩表 a WHERE 成绩 = (SELECT max(成绩) FROM 成绩表 b WHERE a.课程=b.课程)
> 窗⼝函数
聚合/排序函数 ( ) OVER (PARTITION BY ..ORDER BY..)
此函数可解决复杂业务问题,如常见的TOP N问题:出每个课程成绩前三的学⽣ → 按课程分组对学⽣按成绩排名,再从中出排名前三的学⽣ →SELECT 学⽣名字 FROM ( SELECT 学⽣名字, dense_rank()over(partition by 课程 order by 成绩 desc) as '成绩排名' FROM 成绩表) t WHERE t.成绩排名<4
数据产品 ★☆☆
业务场景
对于部分岗位,如我在的集团⽤户数据中⼼,需要负责搭建如CDP这样的数据产品,虽然多数情况下是由开发负责数据库⼯作,但是对于⾥⾯核⼼的功能如运营指标体系、模型报表等,背后的计算逻辑、数据流,要求数据分析师了如指掌。
此外,对于刚开始建⽴数据分析团队的部门,还存在【数据同步】的需求,即要从ERP、CRM等系统将需要分析的原数据同步到⾃⼰的数据库⾥便于分析,⽽此需求需要通过存储过程实现。
必备知识
> 存储过程
即PROCEDURE,可以将某业务需求,或者数据产品中的报表对应的所有SQL语句放在⼀起,⽅便⼀键执⾏,如RFM模型⾥的语句可以写成存储过程,计算结果实时同步到前端
>【SQL SERVER】计划
⾯对【数据同步】需求,有了存储过程后,还需要进⾏定时任务,在⾮业务时间执⾏数据同步的存储过程。如是使⽤SQL SERVER版本,可以通过“计划”实现定时任务。
项⽬部署 ★☆☆
业务场景
数据分析结论在业务场景测试有效后,就需要通过报表、模型等⽅式落地形成业务常态。⽽这个项⽬落地,可能交给开发处理,但更有效的⽅式是分析师可以参与到部署的过程中。⽽这个过程,其中⼀个重要的部分就是数据库的设计:如何设计表格以提⾼计算效率。
必备知识
> 数据库设计与【SQL三范式】
SQL三范式的⽬的在于解决数据冗余、计算效率低等问题,另⼀⽅⾯对数据增加、修改更友好。
这部分从业务场景出发,讨论业务问题的解决⽅案与SQL知识点的关系,帮助答主解决学习了SQL之后可以做什么的问题。
【SQL业务实战】如何分析⽤户?
——⽤SQL做⼀份数据分析报告涉及什么哪些知识点?
在⼯作中,每个数据分析师都离不开做数据分析报告,⽽⼀份可落地的报告更是要求灵活地应⽤⼯具及理论知识。接下来,我们从⼯具应⽤的⾓度,看看如何⽤SQL做⼀份完整的数据分析报告。
数据导⼊
新建数据库
⽤优秀的数据库管理⼯具Navicat 连接数据库
通过Navicat 将数据(如Excel、SQL脚本等格式)导⼊数据库
数据清洗
数据清洗的⽬的是为了将数据按照业务分析需求,剔除异常值、离值,使分析结果更准确反映业务实际。
常见的步骤如下:
是否存在空值:可通过【WHERE `字段名` is null】实现
是否存在重复数据:通过GROUP BY关键字实现,如【SELECT COUNT(*) FROM 表名 GROUP BY 字段名 HAVING COUNT(*) >1】
是否存在业务定义以外的数据:如需要分析华南区域数据,⽽数据中出现华北数据
数据格式化
这⼀步是要根据后续分析需求,调整表格结构、数据格式等,如出于数据存放原因,拿到的数据表格可能是⼀维表,不满⾜分析需求,需要将其调整为⼆维表。
常见的步骤如下:
时间函数:如将【时间戳】格式化为⽇期、时间、⽉份、周⼏(常见于周分析)等,可通过【FROM_UNIXTIME】【DATE_FORMAT】等函数实现
⾏列互换:如解决上述的⼀维表转为⼆维表的问题,可通过关键字【CASE WHEN】实现
字段的拆分与合并:如将收货地址字段拆为省、市、镇等字段,可通过【CONCAT】【LEFT】【RIGHT】【SUBSTRING】等函数实现
整体分析
在开始真正的分析之前,需要进⾏探索性数据分析(Exploratory Data Analysis,EDA),也就是对现有数据进⾏整体分析,对现状有⼤体的了解。更重要的是,通过整体分析,出业务运营存在的问题,进⽽提出业务⽬标,展开后续的深度分析。
常见的步骤如下:
漏⽃分析:如海盗模型AARRR,阿⾥营销模型AIPL等,通过简单的【COUNT】函数,直接数就可实现
建⽴视图
⾯对复杂的业务分析,SQL语句也会变得复杂,往往需要不断嵌套。为了减少分析时语句的复杂性、避免重复执⾏相同语句,可以采⽤新建视图的⽅式,将重复性⾼的语句固定为视图,再在此基础上进⾏复杂查询。
新建视图可通过【CREATE VIEW 视图名 AS SELECT..】实现
⽤户分析
从整体分析中,明确业务问题、⽬标后,便可开始进⾏⽤户分析。根据分析⽬的的不同,采⽤不同的分析⽅法,⽽常见的分析⽅法如下:
【⼈货场】分析
【复购】分析,核⼼问题在于如何计算“复购”:
⽤【窗⼝函数+DENSE_RANK()】统计每个订单是该⽤户的第⼏次消费,命名为'N_CONSUME'
第⼀次消费即为⽤户“⾸购订单”,⼤于等于第⼆次消费的订单则为“复购订单“
针对复购订单进⾏统计,即可进⾏复购分析
【RFM模型】分析,核⼼问题在于如何定义阈值及⼈划分:
通过【窗⼝函数】可计算出每个⽤户的RFM值:
R:每个⽤户最后消费⽇期,与分析⽇期相减的天数即为R
F:通过复购分析中得出的N_CONSUME,计算最⼤消费次数即为F
M:简单地SUM⽤户所有消费⾦额,即为M
阈值:可通过计算所有⽤户的R,F,M平均值获得
所有⽤户的RFM值与阈值⽐较,通过【CASE WHEN】转为 '⾼'、'低' 两个值
根据RFM⾼低值通过【CASE WHEN】将所有⽤户划分到⼋个⼈中
总结建议
根据前⽂进⾏的分析,即可总结得出的结论。此外,在业务分析中,更重要的是如何结合业务场景来给出可落地的业务建议。具体讨论可参考我另⼀回答:
数据分析的结果该如何落地?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。