题解 | #每个创作者每月的涨粉率及截止当前的总粉丝量#
每个创作者每月的涨粉率及截止当前的总粉丝量
https://www.nowcoder.com/practice/d337c95650f640cca29c85201aecff84
难点主要在于计算截止当前的总粉丝量。这一步要使用窗口函数来完成
sum(<column>) over(partition by <partition column> order by <order column>)
<column>
:要计算总和的列名partition by <partition column>
:按照指定的列名进行分区,将数据划分为多个子集,每个子集内的行均有相同的分区键值。在窗口函数中,分区是用来限制透过窗口函数处理的范围的。order by <order column>
:按照指定的列名进行排序,控制窗口函数计算总和时的顺序。
SELECT author, DATE_FORMAT (start_time, '%Y-%m') AS month, ROUND( SUM( CASE WHEN if_follow = 1 THEN 1 WHEN if_follow = 2 THEN -1 ELSE 0 END ) / COUNT(*), 3 ) AS 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 (start_time, '%Y-%m') ) AS total_fans FROM tb_user_video_log JOIN tb_video_info ON tb_user_video_log.video_id = tb_video_info.video_id WHERE YEAR(start_time)=2021 GROUP BY author, month ORDER BY author,total_fans ASC,fans_growth_rate DESC