呜呜犯了三个错误,一个是DATE_FORMAT()之前用过但是这次又忘了,第一次还百分号写反了位置。第二个是计算总粉丝数的时候,想到了用窗口函数和CASE WHEN结合,但只写了一个sum(),但其实最里层的sum()计算的是创作者每个月的粉丝涨跌变化总量,要把涨跌值累加起来才是截止本月的总粉丝数,所以有两个sum(),这个逻辑要理清楚。第三个是GROUP BY后只接了author字段,别忘了要算每个创作者每月的情况,所以还要加上month字段。

SELECT author,DATE_FORMAT(end_time,'%Y-%m') month,
    round(SUM(CASE WHEN if_follow=1 THEN 1 
             WHEN if_follow=2 THEN -1 ELSE 0 END)/COUNT(*),3) fans_growth_rate,
    sum(sum(CASE WHEN if_follow=1 THEN 1
         WHEN if_follow=2 THEN -1 ELSE 0 END))over(partition by author order by DATE_FORMAT(end_time,'%Y-%m')) total_fans
FROM tb_user_video_log t1
LEFT JOIN tb_video_info t2 ON t1.video_id=t2.video_id
WHERE YEAR(end_time)='2021'
GROUP BY author,month
ORDER BY author, total_fans;