此题共包含两张表:

表1:用户-视频互动表tb_user_video_log

表2:短视频信息表tb_video_info

要解决的问题:

  1. 计算2021年里每个创作者每月的涨粉率及截止当月的总粉丝量
  2. 涨粉率=(加粉量 - 掉粉量) / 播放量。
  3. if_follow列,1表示关注,0表示状态没变化,2表示取消关注

解题思路:

  1. 计算每个author的涨粉率,利用if函数做条件判断,sum求和
  2. ※ 计算截止当月的总粉丝量,这一点很关键,相当于是累计求和,需要两步走
  • 利用if函数做条件判断,sum求和,计算当月的粉丝量①
  • 将①的条件放到sum(①)over (partition by order by)中
  1. 将计算好的数据,放到from子句
  2. 按创作者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