队列与漏斗查询
回答留存相关问题
队列与漏斗查询 是 CoddyKit 上的免费 Digital Marketing Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Digital Marketing Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Digital Marketing Academy 课程共包含 4 节课。
什么是同期群?
同期群是共享某个起始事件的一组用户,通常指注册月份相同的用户。随着时间跟踪每个同期群,可以了解真实的留存情况。
汇总指标会掩盖流失,而同期群分析能揭示新用户是否真正留下来。
SELECT user_id,
DATE_TRUNC('month', signup_date) AS cohort_month
FROM users;定义同期群
第一步是为每位用户标注其所属同期群。DATE_TRUNC 会将注册日期截断到月份,使用户能够被整齐地分组。
请将它保存为可复用的构建模块,供后续步骤使用。
SELECT DATE_TRUNC('month', signup_date) AS cohort_month,
COUNT(*) AS cohort_size
FROM users
GROUP BY 1
ORDER BY 1;活跃周期
留存衡量的是用户注册后各个月份中的活跃情况。请计算订单月份与同期群月份之间的间隔,得到相应周期。
周期 0 是注册月份,周期 1 是下一个月,以此类推。
SELECT o.user_id,
(DATE_PART('year', o.order_date) - DATE_PART('year', u.signup_date)) * 12
+ (DATE_PART('month', o.order_date) - DATE_PART('month', u.signup_date)) AS period
FROM orders o
JOIN users u ON u.user_id = o.user_id;构建留存网格
将同期群月份与周期组合起来,然后统计每个单元格中的去重活跃用户数。结果就是经典的留存三角。
每一行代表一个同期群,每一列代表注册后的月份数。
SELECT DATE_TRUNC('month', u.signup_date) AS cohort,
DATE_PART('month', AGE(o.order_date, u.signup_date)) AS period,
COUNT(DISTINCT o.user_id) AS active
FROM users u
JOIN orders o ON o.user_id = u.user_id
GROUP BY 1, 2;留存率
不同规模同期群的原始计数很难直接比较。请将每个周期的活跃用户数除以该同期群的初始规模。
窗口函数可以将周期 0 的规模提取到每一行,用于计算这个比率。
SELECT cohort, period,
active * 1.0 / FIRST_VALUE(active) OVER (
PARTITION BY cohort ORDER BY period
) AS retention
FROM cohort_activity;什么是漏斗?
漏斗会按照有序步骤跟踪用户:访问、注册、加入购物车、购买。步骤之间的流失情况会显示您在哪个环节失去了用户。
漏斗分析能将“转化率低”这类模糊抱怨,转化为对具体薄弱环节的识别。
SELECT step, COUNT(DISTINCT user_id) AS users
FROM events
WHERE step IN ('visit', 'signup', 'cart', 'purchase')
GROUP BY step;统计每个步骤
条件聚合可以一次性统计每个阶段的用户数。FILTER 会统计到达每一步的去重用户数。
一条查询、一行结果,整个漏斗一目了然。
SELECT
COUNT(DISTINCT user_id) FILTER (WHERE step = 'visit') AS visits,
COUNT(DISTINCT user_id) FILTER (WHERE step = 'signup') AS signups,
COUNT(DISTINCT user_id) FILTER (WHERE step = 'purchase') AS buyers
FROM events;步骤转化率
真正有价值的数字,是相邻步骤之间的比率。将每一步除以前一步,就能找出流失最严重的环节。
请将结果转换为小数,以免整数除法将转化率变成零。
SELECT signups * 1.0 / NULLIF(visits, 0) AS visit_to_signup,
buyers * 1.0 / NULLIF(signups, 0) AS signup_to_buy
FROM funnel_counts;带时间戳的有序漏斗
严格的漏斗要求各步骤按顺序发生。只有当下一步骤的时间戳更晚时,才将该步骤与下一步骤连接起来。
这样可以避免将发生在对应注册之前的购买计算在内。
SELECT COUNT(DISTINCT v.user_id) AS visited,
COUNT(DISTINCT p.user_id) AS purchased
FROM events v
LEFT JOIN events p
ON p.user_id = v.user_id
AND p.step = 'purchase'
AND p.event_time > v.event_time
WHERE v.step = 'visit';按渠道划分漏斗
按获客渠道拆分漏斗,可以显示哪些来源带来的用户真正实现了转化,而不仅仅是点击。
按渠道对条件计数进行分组,就能比较各个来源的质量。
SELECT channel,
COUNT(DISTINCT user_id) FILTER (WHERE step = 'visit') AS visits,
COUNT(DISTINCT user_id) FILTER (WHERE step = 'purchase') AS buyers
FROM events
GROUP BY channel;从洞察到行动
同期群可以告诉您每次版本迭代中留存是否有所改善;漏斗则能告诉您应该首先修复哪个步骤。
二者结合后,营销工作会从报告发生了什么,转向诊断为什么发生以及下一步应在哪里投入。
快速检查
您的漏斗会统计访问、注册和购买阶段的用户数。相邻步骤的比率能揭示什么?
回顾
同期群按起始月份对用户分组,并使用 DATE_TRUNC 和 AGE 按周期跟踪留存。漏斗会统计每个有序步骤中的去重用户数,并比较相邻步骤的比率。
现在,您已经拥有完全使用结构化查询语言诊断留存和转化问题的高级工具集。
常见问题解答
「队列与漏斗查询」课时是免费的吗?
是的 — 「队列与漏斗查询」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Digital Marketing Academy 课程的其余内容,请升级到 CoddyKit PRO。 Digital Marketing Academy 课程共包含 4 节课。
「队列与漏斗查询」这节课中我会学到什么?
回答留存相关问题 你通过在浏览器中直接运行的动手代码来练习 Digital Marketing Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Digital Marketing Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Digital Marketing Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「队列与漏斗查询」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Digital Marketing Academy 课中编写并运行代码吗?
能。每节 Digital Marketing Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。