此题共包含两张表:
表1:用户-视频互动表tb_user_video_log
表2:短视频信息表tb_video_info
要解决的问题:
- 计算2021年里每个创作者每月的涨粉率及截止当月的总粉丝量
- 涨粉率=(加粉量 - 掉粉量) / 播放量。
- if_follow列,1表示关注,0表示状态没变化,2表示取消关注
解题思路:
- 计算每个author的涨粉率,利用if函数做条件判断,sum求和
- ※ 计算截止当月的总粉丝量,这一点很关键,相当于是累计求和,需要两步走
- 利用if函数做条件判断,sum求和,计算当月的粉丝量①
- 将①的条件放到sum(①)over (partition by order by)中
- 将计算好的数据,放到from子句
- 按创作者ID、总粉丝量升序排序
select author, month, ROUND((up_fans - down_fans)/v_cnt,3) fans_growth_rate,
sum(cnt_fans) 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)) up_fans,
sum(if(if_follow = 2, 1, 0)) down_fans,
count(start_time) v_cnt,
sum(if(if_follow = 2, -1, if_follow)) cnt_fans
from tb_user_video_log
join tb_video_info using(video_id)
where DATE_FORMAT(start_time,'%Y') = 2021
group by author, `month`
) t1
order by author, total_fans