题解 | #每个创作者每月的涨粉率及截止当前的总粉丝量#

每个创作者每月的涨粉率及截止当前的总粉丝量

http://www.nowcoder.com/practice/d337c95650f640cca29c85201aecff84

题目主要信息

  • 2021年里每个创作者每月的涨粉率及截止当月的总粉丝量
  • 结果按创作者ID总粉丝数量升序

问题拆解

  • 2021年(一定要记得是2021年的)
  • 每个创作者每月涨粉率=(加粉量-掉粉量)/播放量
  • 每个创作者截止当月的总粉丝数量
  1. 把用户-视频互动表tb_user_video_log与短视频信息表tb_video_info连接起来,得到每个创作者视频被观看后的粉丝情况tb
SELECT 
	vi.author,
	DATE_FORMAT(uvl.start_time,'%Y-%m') MONTH,
	CASE WHEN if_follow=1 THEN 1
		WHEN if_follow=2 THEN -1
		ELSE 0
		END fans_cnt --利用case when 来表示粉丝情况,2相当于粉丝数-1
FROM tb_user_video_log uvl
LEFT JOIN tb_video_info vi
ON uvl.video_id=vi.video_id
WHERE YEAR(start_time)=2021 --2021年的情况
  1. 根据表tbauthor,month进行分组,得到每个创作者每个月的涨粉数量month_fans以及涨粉率fans_growth_rate。得到每个创作者每个月的涨粉率以及新增粉丝数量表 t
	  SELECT 
		tb.author,
		tb.month,
		ROUND(SUM(fans_cnt)/COUNT(*),3) fans_growth_rate, -- count(*)表示每个创作者每个月视频总播放量
		SUM(fans_cnt) month_fans -- 对每个创作者每个月粉丝数量进行求和
	  FROM tb
	  GROUP BY tb.author,tb.month
      ORDER BY tb.author,tb.month

3.根据表t,利用 SUM() OVER() 窗口函数得到每个作者截止当月的总粉丝数量total_fans

 SELECT 
 	t.author,
    t.month,
    t.fans_growth_rate,
    SUM(month_fans) over(PARTITION BY  author 
                         ORDER BY author,month) total_fans
  FROM t
	ORDER BY t.author,t.total_fans 

代码

  SELECT t.author,t.month,t.fans_growth_rate,
  SUM(month_fans) over(PARTITION BY  t.author ORDER BY t.author,t.month) total_fans
  FROM(
	  SELECT 
		tb.author,
		tb.month,
		ROUND(SUM(fans_cnt)/COUNT(*),3) fans_growth_rate,
		SUM(fans_cnt) month_fans
	  FROM(
		   SELECT 
			vi.author,
			DATE_FORMAT(uvl.start_time,'%Y-%m') MONTH,
			CASE WHEN if_follow=1 THEN 1
			WHEN if_follow=2 THEN -1
			ELSE 0
			END fans_cnt
		  FROM tb_user_video_log uvl
		  LEFT JOIN tb_video_info vi
		  ON uvl.video_id=vi.video_id
          WHERE YEAR(start_time)=2021
		  ) tb
	  GROUP BY tb.author,tb.month
          ORDER BY author,tb.month
      ) t
	ORDER BY t.author,total_fans 
全部评论
统计总数为什么要order by
点赞 回复 分享
发布于 2022-01-26 10:09

相关推荐

07-09 18:28
门头沟学院 Java
写着提前批,结果还要实习4个月以上???
程序员牛肉:这种不用看,直接投了,面试的时候问对应的HR就行。有可能他们是直接复制的暑期实习的模板。
点赞 评论 收藏
分享
06-15 20:57
已编辑
门头沟学院 Java
CARLJOSEPH...:年轻人有傲气很正常,但是建议工作前洗净傲气。 说实在的,什么奖学金什么奖项的都很一般。尊重你的老师,在有时间的时候去上课,真遇到走不开的事,请态度端正地向你的老师说明情况,请求请假。我相信任何一个有师德的老师都会允许的(我的老师就是这样)。
点赞 评论 收藏
分享
码农索隆:单休一个月少休息4天,一年就是48天,平时节假日,别人3天假期,单休的两天
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务