学习SQL,先有用起来,有了使用价值,之后才是去了解它的原理,让使用更加顺畅。
在大部分业务场景中,通过SQL可以快速的实现数据处理与统计。《SQL数据分析实战》区别于其他工具书,它并没有介绍SQL是什么,而是直接讲了如何使用。就好像大模型一样,我们只需要知道怎么用就好。
在《SQL数据分析实战》一书中,根据日常营销、运营、市场中需要统计的数据内容做了归纳,整体来看可以分为下面几个部分。
1、为什么运营需要用SQL
1.1、哪些场景需要用到SQL
1.2、运营用SQL解决哪些问题
2、具体需要用到的SQL内容
3、常用的SQL统计模板
为什么运营需要用SQL
运营的定位
运营的定位是企业中负责推动产品或服务的日常运作、维护和发展,确保其在市场上的活跃度和竞争力。不仅涉及日常管理,还包括战略规划与执行,旨在实现企业的长期目标。
- 用户关系管理: 通过有效的用户管理策略,如社区运营、客户服务等,增强用户的粘性和忠诚度。
- 数据分析能力: 运营人员需具备强大的数据分析能力,以便从大量数据中提取有价值的信息,指导运营决策。
- 项目管理技能: 能够有效管理多个项目,确保每一个项目都能按时完成并达到预期效果。
《SQL数据分析实战(第2版)》([美]马特·古德瓦瑟,等)【摘要 书评 试读】- 京东图书
哪些场景需要用到SQL
运营数据分析的运用场景广泛,涵盖从用户行为分析到产品优化、销售预测和市场趋势分析等多个方面。这种多维度的应用使得数据分析成为企业运营不可或缺的一部分。下面将详细探讨运营数据分析的各种应用场景:
- 用户行为分析
- 用户细分:通过分析用户的购买历史、浏览习惯和交互行为,企业可以将用户分为不同的群体,以便提供更加个性化的服务或产品。
- 用户体验优化:利用用户在平台上的行为数据,比如点击率、页面访问时长等,可以评估并改进网站的用户界面和用户体验。
- 产品优化
- 功能迭代:基于用户行为数据分析,识别哪些功能受欢迎,哪些需要改进或淘汰,帮助产品更贴近市场需求。
- 市场调整:分析不同市场或用户群体对产品功能的接受度,调整产品策略以适应不同市场的特定需求。
- 销售预测
- 趋势分析:通过对历史销售数据的分析,预测未来的销售趋势,帮助企业提前做好库存和供应链管理。
- 效果评估:分析营销活动的效果,如优惠券使用情况和促销代码追踪,以优化营销策略并提高ROI。
- 市场趋势分析
- 竞争对手监控:通过分析竞争对手的市场表现和客户反馈,调整自身的市场策略,保持竞争优势。
- 市场机会识别:利用行业数据和市场趋势分析,识别新的市场机会或潜在增长领域。
- 风险管理
- 异常检测:分析用户行为数据,识别异常模式,如欺诈行为或安全漏洞,保护企业免受损失。
- 合规性监控:确保数据处理和分析过程符合相关法律法规,如GDPR或其他数据保护规定。
运营用SQL解决什么问题
- 数据提取与查询
- 基本数据获取:运营人员经常需要从数据库中提取特定时间范围或条件下的数据,例如订单信息、用户活跃度等。通过简单的SQL查询,如使用
SELECT
语句结合WHERE
子句,可以直接从数据库中快速获得所需数据。 - 多表数据整合:在实际业务场景中,所需信息往往分散在不同的表中,如订单详情、产品信息和用户资料等。通过SQL的多表查询功能,例如使用
INNER JOIN
或LEFT 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