数据分析中的SQL如何解决业务问题
本文来自知乎问答。
提问:数据分析人员需要掌握sql到什么程度?
请问做一名数据分析人员,在sql方面需要掌握到什么程度呢?会增删改查就可以了吗?还是说关于开发的内容也要会?不同阶段会有不同的要求吗?
正文:
作为专注数据分析结论/项目在业务落地以实现增长的分析师,建议在开始学习新技能前,先明确应用场景。有的放矢才能不枉费努力。
翻译过来就是:先了解与SQL相关的数据分析工作有哪些?有了目标,才能知道需要准备什么知识来应对。
按我目前与SQL相关的工作内容,为你提供以下参考:
(食用说明:根据以下场景,选择需要重点学习的知识点)
SQL应用场景及必备知识:
(星标根据使用频率标记,而非重要性)
数据查询 ★★★
业务场景
也就是常说的“提数”。
实际工作场景中,如果向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做一份完整的数据分析报告。
数据导入
- 新建数据库
- 用优秀的数据库管理工具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」将所有用户划分到八个人群中
总结建议
根据前文进行的分析,即可总结得出的结论。此外,在业务分析中,更重要的是如何结合业务场景来给出可落地的业务建议。
愿无知者有力,愿有力者前行。
我是@饼干哥哥,持续为您打造数字化时代的分析能力。
数据分析中的SQL如何解决业务问题的更多相关文章
- 64位环境中使用SQL查询excel的方式解决
--64位环境中使用SQL查询excel的方式 环境: OS:Windows Server 2008 R2 Enterprise MSSQL:Microsoft SQL Server 2008 R2 ...
- oracle:ORA-00911: 无效字符 问题和解决---Eclipse中的SQL语句不能加分号
eclipse中原sql: 异常: 原因:Eclipse中的SQL语句不能加分号 去掉分号,正常执行,插入成功. 这里把id设为了主键,具有唯一性,重复插入同一id执行插入失败,ORA-00001号错 ...
- 在Excel VBA中写SQL,是一种什么体验
每每提到Excel办公自动化,我们脑海里能想到的就是公式.数据透视表.宏.VBA,这也是我们大部分人数据分析的进阶之路.当我们对于常用VBA技巧已经相当熟练后,往往会有一种"我的VBA知识够 ...
- 在mybatis中写sql语句的一些体会
本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...
- 在Excel VBA中使用SQL到底优势在哪儿
小爬在之前的博文中多次提到,可以在VBA中写SQL来操作Excel文件,实现各类数据处理和分析需求.那么,你可能有这样的疑问:Excel原生的VBA,数据透视表,数据分析功能不够吗,为啥一定要用SQL ...
- Excel VBA中写SQL,这些问题的方法你一定要牢记
小爬之前的文章 [Excel VBA中写SQL,这些问题你一定为此头痛过]中详细讲诉了一些常见的VBA 中使用SQL遇到的问题,这里再补充两个常见的问题场景及对应的解决方案,希望你们看了后能够思路开阔 ...
- (转)ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了"ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务"错误,帮其解决后,发现很多人遇到过这样的问 ...
- ORA-01652:无法通过128(在表空间temp中)扩展temp段 解决方法
ORA-01652:无法通过128(在表空间temp中)扩展temp段 解决方法 (2016-10-21 16:49:53) 今天在做一个查询的时候,报了一个"ORA-01652无法通过 ...
- SQL Server解决孤立用户浅析
孤立用户概念 所谓孤立用户即指在服务器实例上未定义或错误定义了其相应 SQL Server 登录名的数据库用户无法登录到实例. 这样的用户被称为此服务器实例上的数据库的"孤立用 ...
- 在Excel中使用SQL语句查询和筛选
本文转自:http://blog.sina.com.cn/s/blog_5fc375650102e1g5.html 今天在微博上看到@数据分析精选 分享的一篇文章,是关于<在Excel中使用SQ ...
随机推荐
- MyBatis(介绍和环境配置)
ORM(Object Relational Mapping) 设计模式,思想 对象关系映射,是一种数据持久化技术.它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过JavaBea ...
- Dest0g3迎新赛misc部分解析
目录 1. Pngenius 2. EasyEncode 3. 你知道js吗 4. StrangeTraffic 5. EasyWord 6.4096 7.python_jail 8. codeg ...
- 齐博x1云市场注意事项
安装云市场应用注意事项 大到频道,小到插件甚至钩子及风格都可以在线安装,在线升级. 但是有一个大家务必注意的地方,就是重装系统后,再安装有可能导致重复收费. 这个问题是可以解决的.当然如果不是重装系统 ...
- 如何规范App广告的隐私获取,让用户拥有更多知情权?
随着互联网的不断普及,越来越多老百姓使用智能设备触达互联网.但用户经常发现自己无意间提到的东西,打开App就收到相关产品的广告推送,甚至有人怀疑手机App是通过麦克风来窃取自己平时聊天信息中的关键词进 ...
- python信息检索实验之向量空间模型与布尔检索
import numpy as np import pandas as pd import math def bool_retrieval(string): if string.count('and' ...
- ubuntu 输入法IBUS 输入不成功问题
ubuntu 输入法IBUS 输入不成功问题 只需要在 输入如下代码 -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMark ...
- JK触发器与模12计数器
JK触发器 JK触发器具有保持,置0,置1和翻转四个功能. 则可得出次态方程:\(Q_{n+1} = JQ_n'+K'Q_n\) Design `timescale 1ns / 1ps module ...
- 从 WinDbg 角度理解 .NET7 的AOT玩法
一:背景 1.讲故事 前几天 B 站上有位朋友让我从高级调试的角度来解读下 .NET7 新出来的 AOT,毕竟这东西是新的,所以这一篇我就简单摸索一下. 二:AOT 的几个问题 1. 如何在 .NET ...
- Go语言核心36讲52
你好,我是郝林. 专栏到这里,就要结束了. 差不多在半年以前(2018年的第二个季度),极客时间的总编辑郭蕾找到我,说想让我写一个关于Go语言的技术专栏. 我那时候还在轻松筹担任大数据负责人,管理着四 ...
- Opengl ES之YUV数据渲染
YUV回顾 记得在音视频基础知识介绍中,笔者专门介绍过YUV的相关知识,可以参考: <音视频基础知识-YUV图像> YUV数据量相比RGB较小,因此YUV适用于传输,但是YUV图不能直接用 ...