跳到主要内容

小红书大数据面试SQL-笔记的互动率统计

⚠️ 待修正

一、题目背景

这道题来自小红书的数据分析岗面试。小红书是生活方式社区和电商,数据分析师需要从海量业务数据中挖掘洞见。

业务场景:数据分析相关需求在日常工作中频繁出现,这类型的SQL题是面试高频考点。

一、题目

计算每篇笔记的互动率,互动率 = (点赞数 + 收藏数 + 评论数) / 曝光数。并找出互动率大于10%的优质笔记。

假设有笔记表现表 note_performance

+---------+----------+----------+----------+----------+
| note_id | like_cnt | save_cnt | cmt_cnt | view_cnt |
+---------+----------+----------+----------+----------+
| N001 | 120 | 80 | 30 | 2000 |
| N002 | 50 | 20 | 10 | 3000 |
| N003 | 300 | 150 | 60 | 2500 |
| N004 | 10 | 5 | 2 | 500 |
| N005 | 200 | 100 | 50 | 1800 |
+---------+----------+----------+----------+----------+

三、思路分析

  1. 互动率的分子是 likes + saves + comments,分母是 views;
  2. 直接用四则运算计算 interaction_rate;
  3. 筛选互动率 > 0.1 的笔记,按互动率降序排列。
维度评分
题目难度⭐️
题目清晰度⭐️⭐️⭐️⭐️⭐️
业务常见度⭐️⭐️⭐️⭐️⭐️

四、逐步推导

1.计算每篇笔记的互动率

执行SQL

select note_id,
like_cnt,
save_cnt,
cmt_cnt,
view_cnt,
(like_cnt + save_cnt + cmt_cnt) as total_interaction,
round((like_cnt + save_cnt + cmt_cnt) / view_cnt, 4) as interaction_rate
from note_performance

查询结果

+---------+----------+----------+---------+----------+-------------------+------------------+
| note_id | like_cnt | save_cnt | cmt_cnt | view_cnt | total_interaction | interaction_rate |
+---------+----------+----------+---------+----------+-------------------+------------------+
| N001 | 120 | 80 | 30 | 2000 | 230 | 0.1150 |
| N002 | 50 | 20 | 10 | 3000 | 80 | 0.0267 |
| N003 | 300 | 150 | 60 | 2500 | 510 | 0.2040 |
| N004 | 10 | 5 | 2 | 500 | 17 | 0.0340 |
| N005 | 200 | 100 | 50 | 1800 | 350 | 0.1944 |
+---------+----------+----------+---------+----------+-------------------+------------------+

2.筛选互动率大于10%的优质笔记

执行SQL

select note_id,
total_interaction,
view_cnt,
interaction_rate
from (
select note_id,
(like_cnt + save_cnt + cmt_cnt) as total_interaction,
view_cnt,
round((like_cnt + save_cnt + cmt_cnt) / view_cnt, 4) as interaction_rate
from note_performance
) t
where interaction_rate > 0.1
order by interaction_rate desc

查询结果

+---------+-------------------+----------+------------------+
| note_id | total_interaction | view_cnt | interaction_rate |
+---------+-------------------+----------+------------------+
| N003 | 510 | 2500 | 0.2040 |
| N005 | 350 | 1800 | 0.1944 |
| N001 | 230 | 2000 | 0.1150 |
+---------+-------------------+----------+------------------+

五、常见坑点

坑1:CASE WHEN条件的顺序 — 从上到下匹配,先命中先生效。写区间时从低到高或从高到低,避免条件重叠。

坑2:占比计算的分母SUM() OVER() 不带 PARTITION BY 才是全局总量,加了PARTITION BY分母变成组内总量。

六、举一反三

  1. 按骑手/站点/城市维度下钻:定位问题来源,是某个骑手还是某个区域的延迟率偏高

  2. 按延迟程度分级:CASE WHEN 分为轻微/中等/严重三级,关注严重延迟的占比

  3. 时段分析:按小时统计,识别午晚高峰时段的配送压力变化

七、知识点总结

考点说明
CASE WHEN 条件聚合灵活实现分段统计、条件计数、标签化处理

八、建表语句和数据插入

点击展开 DDL & DML
--建表语句
CREATE TABLE note_performance (
note_id string COMMENT '笔记ID',
like_cnt int COMMENT '点赞数',
save_cnt int COMMENT '收藏数',
cmt_cnt int COMMENT '评论数',
view_cnt int COMMENT '曝光数'
) COMMENT '笔记表现表';

-- 插入数据
insert into note_performance(note_id, like_cnt, save_cnt, cmt_cnt, view_cnt) values
('N001', 120, 80, 30, 2000),
('N002', 50, 20, 10, 3000),
('N003', 300, 150, 60, 2500),
('N004', 10, 5, 2, 500),
('N005', 200, 100, 50, 1800);
📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看