with
t1 as(
    select
        i.author,
        date_format(p.start_time,'%Y-%m') as month,
        case 
            when p.if_follow=1 then 1
            when p.if_follow=2 then -1
            else 0 end as fans_num
    from tb_video_info i left join tb_user_video_log p using(video_id)
    where left(p.start_time,4)='2021'
    order by author,month),
t2 as(
    select
        author,
        month,
        ifnull(round(sum(fans_num)/count(*),3),0.000) as fans_growth_rate,
        sum(fans_num) as month_fans_num
    from t1
    group by author,month
    order by author,month)

select
    author,
    month,
    fans_growth_rate,
    sum(month_fans_num) over(partition by author rows between unbounded preceding and current row) as total_fans
from t2
order by author,total_fans