题解 | #近一个月发布的视频中热度最高的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;
查看17道真题和解析
基恩士成长空间 421人发布