计算每个商品详情页的跳出率。定义为:用户进入该商品详情页后,未进行任何其他页面跳转(如加购、点击推荐、返回搜索等)便直接关闭了页面的会话占比
面试题:计算商品详情页的跳出率
1. 题目背景与定义
在电商数据分析中,跳出率(Bounce Rate) 是衡量商品详情页(Detail Page)吸引力和流量质量的重要指标。
- 定义:用户进入该商品详情页(作为会话的首个页面/落地页 Landing Page)后,未进行任何其他页面跳转或互动(即该会话中仅有这一次详情页访问记录),便直接关闭了页面的会话占比。
- 计算公式:
2. 示例数据
用户行为日志表 user_behavior_log
| session_id | user_id | page_name | product_id | action_time |
|---|---|---|---|---|
| S001 | U01 | detail | P1001 | 2023-10-27 10:00:00 |
| S002 | U02 | detail | P1001 | 2023-10-27 10:05:00 |
| S002 | U02 | cart | P1001 | 2023-10-27 10:06:00 |
| S003 | U03 | detail | P1001 | 2023-10-27 10:10:00 |
| S004 | U04 | search | NULL | 2023-10-27 10:15:00 |
| S004 | U04 | detail | P1001 | 2023-10-27 10:16:00 |
| S005 | U05 | detail | P1002 | 2023-10-27 10:20:00 |
| S006 | U06 | detail | P1002 | 2023-10-27 10:30:00 |
| S006 | U06 | detail | P1001 | 2023-10-27 10:31:00 |
3. 期望输出结果
| product_id | entry_sessions | bounce_sessions | bounce_rate |
|---|---|---|---|
| P1001 | 3 | 2 | 66.67% |
| P1002 | 2 | 1 | 50.00% |
数据解析说明:
- P1001 共有 3 个会话以它为落地页(S001, S002, S003)。其中 S001 和 S003 均只有 1 条记录(跳出),S002 后面加购了。S004 的起点是
search页面,故不计入 P1001 的落地会话。跳出率 = 2 / 3 = 66.67%。- P1002 共有 2 个会话以它为落地页(S005, S006)。其中 S005 只有 1 条记录(跳出),S006 后面跳转到了 P1001 详情页。跳出率 = 1 / 2 = 50.00%。
4. SQL 解答
sql
WITH session_analysis AS (
SELECT
session_id,
page_name,
product_id,
-- 标示每个会话内页面的访问顺序
ROW_NUMBER() OVER(PARTITION BY session_id ORDER BY action_time) as step_no,
-- 计算每个会话内的总操作步骤数
COUNT(1) OVER(PARTITION BY session_id) as total_steps
FROM user_behavior_log
),
landing_sessions AS (
SELECT
product_id,
session_id,
-- 如果总步骤数为1,则视为跳出(Bounce)
CASE WHEN total_steps = 1 THEN 1 ELSE 0 END as is_bounce
FROM session_analysis
-- 过滤出:会话的第一步(Landing Page)且必须是商品详情页
WHERE step_no = 1 AND page_name = 'detail'
)
SELECT
product_id,
COUNT(session_id) as entry_sessions,
SUM(is_bounce) as bounce_sessions,
CONCAT(ROUND(SUM(is_bounce) * 100.0 / COUNT(session_id), 2), '%') as bounce_rate
FROM landing_sessions
GROUP BY product_id
ORDER BY product_id;
5. SQL 分析与面试考点应对
此题是互联网电商及数据分析岗位高频出现的“漏斗分析 / 路径分析”演变题。面试官主要考察以下几个核心能力:
① 窗口函数的组合应用(核心考点)
ROW_NUMBER():用于对每个session_id内的行为按时间排序,从而精准锁定 "落地页"(第一步,step_no = 1)。COUNT(1) OVER(PARTITION BY ...):直接在当前层获取到该会话的总事件数(total_steps)。这种通过窗口函数在同一层级内既拿到“序号”又拿到“总量”的做法,比先GROUP BY再JOIN的性能好得多,是 SQL 优化的加分项。
② 业务逻辑的边界定义
在面试中,主动向面试官确认定义能展现极佳的职业素养:
- 什么是“跳出”?:必须是第一个页面是详情页,且整个会话只有这一个页面。
- 如果用户通过搜索(Search)进入详情页,然后关闭,算不算该详情页的跳出?按照行业标准,这属于搜索页的延续,不属于详情页的 Landing Page。本套 SQL 方案通过
WHERE step_no = 1 AND page_name = 'detail'严格排除了这种情况。
③ 易错点提示
- 数据类型转换:在计算百分比时,很多数据库中
INT / INT会直接得到 0。SQL 中使用* 100.0可以自动将分子转换为浮点数,避免精度丢失。 - 聚合函数安全:使用
SUM(is_bounce)累加跳出会话,COUNT(session_id)计算总落地会话,最后用GROUP BY product_id呈现每个商品的指标。