题解 | #每个创作者每月的涨粉率及截止当前的总粉丝量#
每个创作者每月的涨粉率及截止当前的总粉丝量
https://www.nowcoder.com/practice/d337c95650f640cca29c85201aecff84
#每个月 涨粉率=(加粉量 - 掉粉量) / 播放量。结果按创作者ID、总粉丝量升序排序。 #if_follow-是否关注为1表示用户观看视频中关注了视频创作者,为0表示此次互动前后关注状态未发生变化,为2表示本次观看过程中取消了关注。 select author , SUBSTRING_INDEX(start_time,"-",2) as month, round(sum(case when if_follow = 1 then 1 when if_follow = 2 then -1 else 0 end)/count(if_follow),3) as fans_growth_rate, sum(sum(case when L.if_follow = 1 then 1 when L.if_follow = 2 then -1 else 0 end)) over ( partition by I.author order by SUBSTRING_INDEX(start_time,"-",2))as total_fans from tb_user_video_log as L left join tb_video_info as I on L.video_id = I.video_id where year(L.start_time)=2021 and year(L.end_time)=2021 group by I.author,month order by I.author,total_fans;
这道题目巧妙运用的是窗口函数的使用,
基本语法 sum/avg/... over (partition by [分组的字段 本道习题的话是author] order by [维度上的字段,本道题的话是日期上的累加])
这里的order by 与我们一般意义上的order by 按照........排序 是不一样的
这里我们可以理解为排序序号上的累加。