题解 | #每个创作者每月的涨粉率及截止当前的总粉丝量#
每个创作者每月的涨粉率及截止当前的总粉丝量
https://www.nowcoder.com/practice/d337c95650f640cca29c85201aecff84
明确题意:
计算2021年里每个创作者每月的涨粉率及截止当月的总粉丝量。
涨粉率=(涨粉量-掉粉量)/播放量,结果按创作者ID、总粉丝量升序排序。
问题分解:
- 关联用户-视频互动记录和短视频信息表:join tb_user_video_log using(video_i);
- 筛选2021年的记录:where year(start_time)=2021;
- 计算每个创作者每月的涨粉率及截止当月的总粉丝量:
- 按作者和月份分组:group by author,substr(start_time,1,10);
- 计算涨粉量(特殊情况if_follow=2时表示掉粉):sum(if(if_follow=2,-1,if_follow)) as fans_add_cnt
- 计算播放量:count(*) play_cnt
- 计算涨粉率,保留三位小数:round(fans_add_cnt/play_cnt,3)
- 计算截止当月的总粉丝量(累积求和):
sum(fans_add_cnt)over(partition by author order by month)
注:累积和不要把月份分组select author,month, round(fans_add_cnt/play_cnt,3) fans_add_rate, sum(fans_add_cnt) over(partition by author order by month) total_fans from( select b.author, substr(a.start_time,1,7) month, sum(if(a.if_follow=2,-1,a.if_follow)) fans_add_cnt, count(*) play_cnt from tb_user_video_log a left join tb_video_info b on a.video_id=b.video_id where year(a.start_time)=2021 group by b.author,substr(a.start_time,1,7) )p order by author ,total_fans