WITH
zb AS ( -- 清洗数据,得出2021年内的月份,粉丝变化明细,作者
SELECT
DATE_FORMAT(u.start_time,'%Y-%m') AS month,
u.if_follow,
v.author
FROM tb_user_video_log AS u
INNER JOIN tb_video_info AS v
ON (u.video_id = v.video_id)
WHERE u.start_time >= '2021-01-01 00:00:00'
AND u.start_time < '2022-01-01 00:00:00'
),
tf AS ( -- 对作者和月份分组,计算视频播放量,计算粉丝增长数。
SELECT
author,month,
COUNT(*) AS gk,
SUM(CASE WHEN if_follow = 1 THEN 1 WHEN if_follow = 2 THEN -1 ELSE 0 END) AS fs
FROM zb
GROUP BY author,month
)
SELECT -- 主查询
author,month,
ROUND(fs/gk,3) AS fans_growth_rate, -- 粉丝增长/播放量=粉丝增长率
SUM(fs) OVER (PARTITION BY author ORDER BY month) AS total_fans -- 开窗口函数,按作者分组,对月份升序后累加粉丝数
FROM tf
ORDER BY author,total_fans;