SELECT
author,
month,
round(diff / play,3) fans_growth_rate,
sum(diff) over(
partition by author
order by month
) total_fans
FROM
(SELECT
author,
DATE_FORMAT(start_time, '%Y-%m') month,
sum(if(if_follow = 1,1,0)) - sum(if(if_follow = 2,1,0)) diff,
count(*) play
FROM
tb_user_video_log t_u
JOIN
tb_video_info t_i
ON
t_u.video_id = t_i.video_id
where
year(end_time) = 2021
group by
author,month(end_time)
) t
ORDER BY
author,total_fans
要求是:计算2021年里每个创作者每月的涨粉率及截止当月的总粉丝量
注: 涨粉率=(加粉量 - 掉粉量) / 播放量。结果按创作者ID、总粉丝量升序排序。 if_follow-是否关注为1表示用户观看视频中关注了视频创作者,为0表示此次互动前后关注状态未发生变化,为2表示本次观看过程中取消了关注。
那就很明晰了,直接用sum if 或者case来进行diff的计算,也就是加粉量-掉粉量 然后一个窗口函数分别计算每个月diff累加结果, 最后排序完成本题.