通过真实业务数据,练习产品分析 SQL。
SQL 课程 19:产品转化漏斗分析
漏斗分析是在问:一批对象经过一系列阶段后,还剩下多少?产品经理会用它观察注册、激活、付费等步骤;销售团队也会用它观察商机从接触到成交的过程。
本课使用 sales_pipeline 的 deal_stage 做一个 CRM 商机漏斗:Prospecting(待开发)→ Engaging(跟进中)→ Won(已成交)。Lost(已流失)是离开主路径的结果,需要单独观察。
需要先说明数据边界:当前表记录的是每笔商机的阶段快照,不是同一个用户逐步经过每个阶段的事件日志。因此,本课得到的是“商机阶段分布和成交率练习”,不能直接当成严格的用户转化率。
WITH stage_counts AS ( SELECT deal_stage, COUNT(*) AS opportunity_count FROM sales_pipeline GROUP BY deal_stage ) SELECT deal_stage, opportunity_count FROM stage_counts ORDER BY ...;
漏斗的第一步:先把每个阶段数清楚
最基础的漏斗不是马上算百分比,而是先回答“每个阶段有多少笔商机”。COUNT(*) 统计记录数,GROUP BY deal_stage 把记录按阶段分组。只有分组结果正确,后面的比例才有意义。
数据库默认按字母顺序返回阶段,但业务漏斗需要自己的顺序。可以用 CASE WHEN 给阶段编号:Prospecting 排第 1,Engaging 排第 2,Won 排第 3,Lost 排第 4。
SELECT deal_stage,
COUNT(*) AS opportunity_count
FROM sales_pipeline
GROUP BY deal_stage
ORDER BY CASE deal_stage
WHEN 'Prospecting' THEN 1
WHEN 'Engaging' THEN 2
WHEN 'Won' THEN 3
WHEN 'Lost' THEN 4
END;小提醒:页面会把 Won 显示成“已成交”,但 SQL 条件和排序仍要使用原始值 Won。
数量、占比和成交率不是一回事
阶段数量回答“有多少笔”,阶段占比回答“全部商机中这一阶段占多少”。例如一个阶段有 1,000 笔,不代表这 1,000 笔都来自同一批用户,也不代表它们最终都会成交。
本课还会计算整体 Won rate:已成交商机数 ÷ 全部商机数。这个指标描述当前 CRM 管道中的成交比例;如果要分析严格的用户转化,还需要用户事件表和明确的进入漏斗时间。
本课使用的漏斗指标
| 指标 | 计算方式 | 回答的问题 |
|---|---|---|
| 阶段数量 | COUNT(*) | 每个阶段有多少笔商机? |
| 阶段占比 | 阶段数量 ÷ 全部数量 | 全部商机中有多少在这个阶段? |
| 成交率 | Won 数量 ÷ 全部数量 | 当前管道中有多少笔已成交? |
按产品拆开,寻找漏斗差异
整体成交率可能掩盖产品之间的差异。按 product 分组后,可以同时观察每种产品的商机数量、成交数量和成交率。分析时要同时看分母:只有几笔商机的产品,即使成交率很高,也未必比大体量产品更稳定。
练习
本课会核对分组结果、阶段顺序、比例计算和产品维度的完整结果;请区分阶段占比与成交率。