读后感:《SQL数据分析实战》运营SQL实用手册

学习SQL,先有用起来,有了使用价值,之后才是去了解它的原理,让使用更加顺畅。

在大部分业务场景中,通过SQL可以快速的实现数据处理与统计。《SQL数据分析实战》区别于其他工具书,它并没有介绍SQL是什么,而是直接讲了如何使用。就好像大模型一样,我们只需要知道怎么用就好。

在《SQL数据分析实战》一书中,根据日常营销、运营、市场中需要统计的数据内容做了归纳,整体来看可以分为下面几个部分。

1、为什么运营需要用SQL

1.1、哪些场景需要用到SQL

1.2、运营用SQL解决哪些问题

2、具体需要用到的SQL内容

3、常用的SQL统计模板

为什么运营需要用SQL

运营的定位

运营的定位是企业中负责推动产品或服务的日常运作、维护和发展,确保其在市场上的活跃度和竞争力。不仅涉及日常管理,还包括战略规划与执行,旨在实现企业的长期目标。

  • 用户关系管理: 通过有效的用户管理策略,如社区运营、客户服务等,增强用户的粘性和忠诚度。
  • 数据分析能力: 运营人员需具备强大的数据分析能力,以便从大量数据中提取有价值的信息,指导运营决策。
  • 项目管理技能: 能够有效管理多个项目,确保每一个项目都能按时完成并达到预期效果。

《SQL数据分析实战(第2版)》([美]马特·古德瓦瑟,等)【摘要 书评 试读】- 京东图书

哪些场景需要用到SQL

运营数据分析的运用场景广泛,涵盖从用户行为分析到产品优化、销售预测和市场趋势分析等多个方面。这种多维度的应用使得数据分析成为企业运营不可或缺的一部分。下面将详细探讨运营数据分析的各种应用场景:

  1. 用户行为分析
  • 用户细分:通过分析用户的购买历史、浏览习惯和交互行为,企业可以将用户分为不同的群体,以便提供更加个性化的服务或产品。
  • 用户体验优化:利用用户在平台上的行为数据,比如点击率、页面访问时长等,可以评估并改进网站的用户界面和用户体验。
  • 产品优化
  • 功能迭代:基于用户行为数据分析,识别哪些功能受欢迎,哪些需要改进或淘汰,帮助产品更贴近市场需求。
  • 市场调整:分析不同市场或用户群体对产品功能的接受度,调整产品策略以适应不同市场的特定需求。
  • 销售预测
  • 趋势分析:通过对历史销售数据的分析,预测未来的销售趋势,帮助企业提前做好库存和供应链管理。
  • 效果评估:分析营销活动的效果,如优惠券使用情况和促销代码追踪,以优化营销策略并提高ROI。
  • 市场趋势分析
  • 竞争对手监控:通过分析竞争对手的市场表现和客户反馈,调整自身的市场策略,保持竞争优势。
  • 市场机会识别:利用行业数据和市场趋势分析,识别新的市场机会或潜在增长领域。
  • 风险管理
  • 异常检测:分析用户行为数据,识别异常模式,如欺诈行为或安全漏洞,保护企业免受损失。
  • 合规性监控:确保数据处理和分析过程符合相关法律法规,如GDPR或其他数据保护规定。

运营用SQL解决什么问题

  1. 数据提取与查询
  • 基本数据获取:运营人员经常需要从数据库中提取特定时间范围或条件下的数据,例如订单信息、用户活跃度等。通过简单的SQL查询,如使用SELECT语句结合WHERE子句,可以直接从数据库中快速获得所需数据。
  • 多表数据整合:在实际业务场景中,所需信息往往分散在不同的表中,如订单详情、产品信息和用户资料等。通过SQL的多表查询功能,例如使用INNER JOINLEFT JOIN,能够有效地合并多个表中的数据,为运营决策提供全面的数据支持。
  • 数据分析与洞察
  • 业绩指标计算:运营团队需要定期计算各种业务指标,如总销售额、平均订单值等。通过SQL的聚合函数如SUM()AVG()等,可以快速计算出这些关键指标,帮助评估运营效果。
  • 复杂数据分析:对于更复杂的分析需求,如计算留存率、客户生命周期价值等,SQL的窗口函数和自定义聚合功能提供了强大的数据处理能力。例如,使用OVER(PARTITION BY)可以进行分组计算,有效支持复杂的业务分析。
  • 报告自动化与优化
  • 数据可视化支持:虽然SQL本身不直接支持数据可视化,但其处理后的数据可以方便地导入到BI工具中进行图表展示。这样,运营人员可以通过图形界面直观地监控业务趋势和性能指标。
  • 自动报告生成:通过定时运行的SQL查询和存储过程,可以实现数据报告的自动更新。这不仅提高了工作效率,还能确保运营团队总是掌握最新的业务数据。
  • 效率提升与沟通简化
  • 减少技术依赖:运营人员如果掌握了SQL,可以在不依赖IT部门的情况下自行处理数据查询和分析任务。这不仅加快了工作流程,也减轻了技术团队的工作负担。

需要掌握哪些SQL技能

SQL的基础数据类型

SQL的基础数据类型主要有以下几种:

1.数值类型:包括整数类型(如INT、SMALLINT、TINYINT等)、浮点数类型(如FLOAT、DOUBLE、REAL等)和定点数类型(如DECIMAL、NUMERIC等)。

2.字符串类型:用于存储字符数据,包括CHAR、VARCHAR、TEXT等。其中,CHAR是定长字符串,VARCHAR是变长字符串,TEXT用于存储大量文本数据。

3.日期和时间类型:用于存储日期和时间数据,包括DATE、TIME、DATETIME、TIMESTAMP等。其中,DATE表示日期,TIME表示时间,DATETIME表示日期和时间,TIMESTAMP表示时间戳。

4.二进制类型:用于存储二进制数据,包括BINARY、VARBINARY、BLOB等。其中,BINARY是定长二进制数据,VARBINARY是变长二进制数据,BLOB用于存储大量二进制数据。

5.布尔类型:用于存储逻辑值,包括BOOLEAN、BIT等。其中,BOOLEAN表示布尔值,BIT表示位值。

6.数据结构:JSON和数组,如JavaScript对象表示法(JavaScript object notation,JSON)和数组。数组是简单的数据列表,通常用方括号括起来,如['cat','dog','horse'];JSON对象说一系列以逗号分隔并用大括号括起来的键值对,如{'name':'Bob','age':27'}。

SQL查询的基础关键语法

select :输出筛选分组聚合后的最终展示列名和聚合运算列

from:从数据表获取数据

where:筛选数据的条件逻辑

and/or:筛选条件之间的关系

in/not in:范围条件筛选

is null/is not null:是否为空判断

group by:对筛选后数据进行分组聚合

having:对聚合列进行过滤

order by:对输出结果按指定列排序

limit 5:限制输出数据行数

SQL查询的数据组合

1.使用join连接表(inner和outer可省略):用on关联对应的列名。

如:

复制代码
select * from table1 left join table2 on table1.name = table2.name

2.使用union (all)对表进行上下合并(加all表示不去重),注意表对相同列输出列名需保持一致,否则会同时展示两个表的列。

如:

复制代码
select * from table1 
union all 
select * from table2

3.公用表表达式:使用with建立临时表

复制代码
with tb as (
  select * from table1
)
select * from tb

常用的SQL函数和取数模板

常用的SQL函数

1.转换数据

case when函数:将查询列中的值映射为其他值

复制代码
case when ... then '...' 
 when ... then ''
 else '' end as new_columns

coalesce函数:填充为首个非空值

nullif函数:如果第一个值等于第二个值则返回null

least函数:返回任意数量的值的最小值

greatest函数:返回任意数量的值的最大值

转换函数:columns::datatype(columns为列名,datatype为数据类型)

distinct函数:获得唯一不同列组合

distinct on函数:对目标列存在相同数据,仅返回一行数据,可配合order by对保留行进行选择

如:

复制代码
select distinct on (first_name),* from table order by first_name,hire_date

2.聚合函数

count(columns):计算非空行数

count(*):计算所有行数

min():最小值

max():最大值

sum():求和

avg():求平均值

stddev():求标准差

var():求方差

regr_slope(x,y):求x为因变量,y为自变量时线性回归的斜率

regr_intercept(x,y):求x为因变量,y为自变量时线性回归的截距

corr(x,y):求x与y之间的皮尔逊相关系数

3.窗口函数

复制代码
select {columns},{window_func} over (partition by {key} order by {order_key}) from table

其中:window_func表示窗口函数,key表示要分区的列,order_key表示要排序的列;常用窗口函数有:

  • row_number:1,2,3
  • rank:1,1,3
  • dense_rank:1,1,2
  • ntile(n):基于order by计算n分位数
  • lag(columns,n):返回columns列当前行向前n行数据
  • lead(columns,n):返回columns列当前行向后n行数据

frame子句:(PRECEDING:往前 - FOLLOWING:往后)

如,滚动的近7天数据:

复制代码
select date
,amount
,avg(amount) over(order by date rows between 7 preceding and current row) as date_move_7_avg
from table
相关推荐
Edingbrugh.南空2 小时前
Flink自定义函数
大数据·flink
gaosushexiangji3 小时前
利用sCMOS科学相机测量激光散射强度
大数据·人工智能·数码相机·计算机视觉
无级程序员5 小时前
大数据平台之ranger与ldap集成,同步用户和组
大数据·hadoop
lifallen6 小时前
Paimon 原子提交实现
java·大数据·数据结构·数据库·后端·算法
TDengine (老段)7 小时前
TDengine 数据库建模最佳实践
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
张先shen7 小时前
Elasticsearch RESTful API入门:全文搜索实战(Java版)
java·大数据·elasticsearch·搜索引擎·全文检索·restful
Elastic 中国社区官方博客7 小时前
Elasticsearch 字符串包含子字符串:高级查询技巧
大数据·数据库·elasticsearch·搜索引擎·全文检索·lucene
张先shen8 小时前
Elasticsearch RESTful API入门:全文搜索实战
java·大数据·elasticsearch·搜索引擎·全文检索·restful
尽兴-8 小时前
如何将多个.sql文件合并成一个:Windows和Linux/Mac详细指南
linux·数据库·windows·sql·macos
天翼云开发者社区8 小时前
Doris-HDFS LOAD常见问题汇总(二)
大数据·doris