题解 | #近一个月发布的视频中热度最高的top3视频#
近一个月发布的视频中热度最高的top3视频
https://www.nowcoder.com/practice/0226c7b2541c41e59c3b8aec588b09ff
# 找出近一个月发布的视频中热度最高的top3视频 # 字段:video_id、hot_index # 热度hot_index = (100*完播率+5*点赞数+3*评论数+2*转发数)*新鲜度 # 新鲜度 = 1/(最近无播放天数 + 1) # tb1: # 完播率 =(end_time - start_time) >= duration 则完播 with tb1 as( select video_id,date(end_time) as play_date, timestampdiff(second,start_time,end_time) as play_duration, duration, if_like,if(comment_id is not null,1,0) as if_comment, if_retweet from tb_user_video_log left join tb_video_info using(video_id) # 限定时间近一个月发布的视频 where date(release_time) >= date_sub((select max(date(end_time)) from tb_user_video_log),interval 29 day) ), # tb2:计算完播率、点赞数、评论数、转发数 tb2 as( select video_id, count(if(play_duration>=duration,1,null))/count(play_date) as Completion_rate, sum(if_like) as likes,sum(if_comment) as comments,sum(if_retweet) as retweets, # 新鲜度=1/(最近无播放天数+1) # (select max(date(end_time)) from tb_user_video_log)- max(play_date) as no_play_day, timestampdiff(day,max(play_date),(select max(play_date) from tb1)) as no_play_day from tb1 group by video_id ) # 热度hot_index = (100*完播率+5*点赞数+3*评论数+2*转发数)*新鲜度 select video_id,round((100*Completion_rate+5*likes+3*comments+2*retweets)/(1+no_play_day),0) as hot_index from tb2 order by hot_index desc limit 3; # 函数中的参数整体需要多用括号隔绝,date_sub((select max(date(end_time)) from tb_user_video_log),interval 29 day) # 注意点:近一个月发布 # timestampdiff(unit,time1,time2),其中time1<time2 # datediff(date1,date2),其中date1>date2 # 这个题目真难理解,最近无播放天数 = 整体最近播放天数 - 单视频最近播放天数