题解 | #每个创作者每月的涨粉率及截止当前的总粉丝量#

每个创作者每月的涨粉率及截止当前的总粉丝量

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
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务