每个数据科学家都应该知道的实用 SQL 技巧

在本文中,我们将介绍基本的 SQL 模式和工作流程,使日常数据分析更清晰、更快、更容易扩展。

来源:KDnuggets

简介

对于基本聚合来说,仅关注 SELECT、WHERE 和 GROUP BY 就足够了,但许多真正的分析任务需要的模式超出了简单查询的范围。示例包括检测连续活动条纹、按支出层对客户进行细分、平滑嘈杂的时间序列数据或跨行跟踪计划升级路径。

本文介绍了 7 个超越基础知识的实用 SQL 模式,重点关注解决实际分析问题的技术。

设置数据集

我们将使用来自虚构的订阅软件即服务 (SaaS) 公司的示例客户交易表:

创建表事务 (

transaction_id 串行主键,

客户 ID INT,

plan_type VARCHAR(20), -- '入门', '专业', '企业'

金额 NUMERIC(10,2),

status VARCHAR(20), -- '已完成', '已退款', '失败'

创建于时间戳

);2023 年 9 月至 2024 年 6 月期间 7 个客户的 36 笔交易的完整数据集可在 Seed.sql 中找到。在继续查询之前运行它。1. 使用 LAG() 测量事件之间的时间LAG() 和 LEAD() 让您无需自连接即可访问上一行或下一行的值。它们对于计算更新节奏、流失信号和重新参与延迟等事件之间的差距特别有用。任务:计算每个客户连续完成的交易之间经过了多少天。选择客户 ID,创建于,LAG(创建时间)超过(按 customer_id 分区ORDER BY 创建时间) AS previous_transaction_at,圆形(摘录(纪元来自(创建时间 - LAG(创建时间) 超过 (按 customer_id 分区ORDER BY 创建于))) / 86400) AS days_since_last来自交易WHERE 状态 = '已完成'按客户 ID、创建时间排序;输出(截断):2. 使用自连接将同一表中的一行与其他行进行比较