转化率本质是“成功事件数÷初始事件数”,关键在明确漏斗起点与终点、时间范围及去重维度,需通过JOIN或EXISTS确保“先A后B”逻辑,且分子分母必须同粒度对齐。

转化率本质是“成功事件数 ÷ 初始事件数”,用 SQL 实现的关键不是套公式,而是先理清业务口径:谁是漏斗起点?什么是“转化成功”?时间范围和去重逻辑怎么定?
比如电商下单转化率,起点通常是“商品曝光”或“详情页访问”,终点是“支付成功”。不能直接用订单表除以用户表——必须保证分子分母在相同维度(如按天、按用户、按商品)对齐,且分母里已包含分子。
COUNT(DISTINCT 订单ID) / COUNT(DISTINCT 用户ID)(用户没曝光就下单?逻辑断裂)转化不是独立统计两张表,而是要确认“先有A,后有B”。推荐用 LEFT JOIN + 条件过滤,或 WHERE EXISTS 子查询。
SELECT<br> c.dt,<br> COUNT(DISTINCT o.user_id) * 1.0 / NULLIF(COUNT(DISTINCT c.user_id), 0) AS cvr<br>FROM click_log c<br>LEFT JOIN order_log o<br> ON c.user_id = o.user_id<br> AND c.item_id = o.item_id<br> AND o.event_time >= c.event_time<br> AND o.event_time < c.event_time + INTERVAL '1 day'<br>WHERE c.dt = '2024-06-01'<br>GROUP BY c.dt;
NULLIF 避免除零;时间窗口(如1天内)必须业务认可;JOIN 条件里补上 item_id 是防跨商品误算用户级转化率、会话级转化率、商品曝光次级转化率,结果差异巨大。建模前必须约定好“一个分母单位是什么”。
复杂转化路径(如 浏览→加购→下单→支付)建议拆步建模,用 CTE 分层定义各环节行为,再逐级 JOIN。
WITH view AS (SELECT DISTINCT user_id, dt FROM page_view WHERE page='item'), cart AS (SELECT DISTINCT user_id, dt FROM cart_add), pay AS (SELECT DISTINCT user_id, dt FROM order_pay),再连表算各阶段转化以上就是SQL统计转化率怎么写_业务指标SQL建模方法【教程】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号