题解 | #每个创作者每月的涨粉率及截止当前的总粉丝量#
每个创作者每月的涨粉率及截止当前的总粉丝量
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 按照........排序 是不一样的
这里我们可以理解为排序序号上的累加。
