题解 | #近一个月发布的视频中热度最高的top3视频#

近一个月发布的视频中热度最高的top3视频

https://www.nowcoder.com/practice/0226c7b2541c41e59c3b8aec588b09ff

### 1. 统计视频完播率 :sum()/count() 或者avg() 
           最近无播放天数:当视频无播放量时,单表最大播放时间-视频发布时间;
		                  当视频播放量大于0时,单表最大播放时间-视频最大播放时间;
	解题思路:首先根据datediff((select max(end_time) from tb_user_video_log),tvi.release_time)<=29条件筛选出 近一个月之内 存在视频播放纪录的视频ID的视频播放的 完播率,转发数,点赞数,评论数,和最近无播放天数。然后再根据 热度求取公式计算每个视频ID的热度计算。

# 统计当前最大播放纪录时间里一个月内的发布的视频

    select A.video_id ,
           round((100*A.videoRate+5*A.likeCnt+3*A.commCnt+2*A.retwCnt)/A.newDays) hot_index 
      from (
    select tvl.video_id ,
           sum(if(timestampdiff(second,tvl.start_time,tvl.end_time)>=tvi.duration,1,0))/count(tvl.start_time) videoRate, # 视频完播率
           sum(tvl.if_like) likeCnt , # 点赞数
           count(tvl.comment_id) commCnt , # 评论数 
           sum(tvl.if_retweet) retwCnt , # 转发数 
           (datediff((select max(end_time) from tb_user_video_log),max(tvl.end_time))+1) newDays 
                 # 最近无播放天数(当播放次数为0时:当前表内最大日期-发布日期  当播放次数大于0时:当前表内最大日期-每个视频的最大播放时间)
      from tb_user_video_log tvl join tb_video_info tvi using(video_id) 
     where datediff((select max(end_time) from tb_user_video_log),tvi.release_time)<=29 
     group by tvl.video_id 
        ) A 
        order by hot_index desc 
        limit 3;     

全部评论

相关推荐

天门一键开:她的意思是问你有没有论文吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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