这是一套无需注册即可下载的 PostgreSQL 练习数据。它用三张小表模拟用户注册、站内行为和订单状态,适合练习数据运营岗位常见的口径定义、JOIN、漏斗、同期群、复购和异常排查。
所有记录均为 Offer库编辑部编写的合成数据,不对应任何真实公司、用户或经营结果。数据量有意保持较小,便于先手工核对,再扩展查询。
直接下载
文件版本:2026-08-13。SQL 会删除并重建同名练习表,请只在个人练习数据库中运行,不要在生产库执行。
数据包含什么
| 表 | 粒度 | 主要字段 | 可以回答的问题 |
|---|---|---|---|
users | 每位合成用户一行 | 注册时间、渠道、平台、地区 | 新增用户、渠道结构、注册同期群 |
user_events | 每次行为一行 | 事件、时间、会话、平台、版本 | 激活、漏斗、留存、版本异常 |
orders | 每笔订单一行 | 创建/支付时间、金额、状态、渠道 | 支付转化、GMV、退款、复购 |
表之间通过 user_id 关联,并设置主键、外键、非空和枚举约束。SQL 使用显式插入列,便于检查 schema 变化。建表和插入语法可对照 PostgreSQL 官方的 CREATE TABLE、插入数据与外键教程。
建议的练习顺序
1. 先验证数据,不急着写业务结论
运行脚本后检查三张表的行数、主键唯一性、外键完整性和时间关系。例如,支付时间不应早于订单创建时间;同一用户可能有多次事件和多笔订单,因此直接 JOIN 可能放大行数。
2. 从单表口径开始
先计算每日注册用户、各渠道用户和订单状态分布。每个指标都写清:
- 一行代表什么;
- 分子、分母和排除项;
- 使用
created_at还是paid_at; - 按 UTC 还是业务时区;
- 取消和退款订单是否计入。
3. 再做跨表分析
推荐依次完成:
- 注册后 24 小时内完成
onboarding_complete的激活率; product_view → add_to_cart → checkout_start → purchase用户漏斗;- 按注册渠道计算首购转化;
- 按注册周观察后续活跃;
- 找出拥有至少两笔已支付订单的复购用户;
- 比较平台与应用版本的错误事件占比。
先写中间 CTE 并核对每一步行数,比直接堆叠一个长查询更容易发现重复与分母错误。
一个起步查询
下面只检查每日注册量,不提供完整题目答案:
SELECT
registered_at::date AS registration_date,
COUNT(*) AS registered_users
FROM users
GROUP BY registered_at::date
ORDER BY registration_date;下一步可以加入 channel,再检查分组后的总和是否仍与每日用户数一致。涉及窗口时,先决定按自然日还是注册后连续 24 小时计算。
如何把练习变成作品集
不要只提交 SQL 截图。一个可复核的小项目应包含:
- 问题与决策对象;
- 表粒度、键和数据限制;
- 指标定义与查询;
- 至少两项质量校验;
- 结果表或图;
- 事实、假设与不能得出的结论;
- 建议的下一步数据或实验。
由于这是合成数据,作品集必须保留这一说明,也不能把查询结果写成真实业务增长。你可以展示分析方法和验证能力,但不能声称项目曾在某家公司上线。
常见错误
- 把事件行数当成用户数,没有按
user_id去重; - 将所有订单按
created_at统计,却把结果命名为支付 GMV; - JOIN 事件和订单后没有先聚合,导致金额重复累加;
- 用尚未获得完整观察窗口的同期群计算留存;
- 看到版本差异就断言版本导致问题,没有检查渠道和平台构成;
- 忽略取消、退款、空值和时区。
需要先补指标口径,可阅读数据运营指标口径表;需要学习排查顺序,可查看运营数据异常诊断。准备岗位和面试时,再结合数据运营岗位指南、SQL 面试题与解题框架和数据运营专题。