题解 | #近一个月发布的视频中热度最高的top3视频#
近一个月发布的视频中热度最高的top3视频
https://www.nowcoder.com/practice/0226c7b2541c41e59c3b8aec588b09ff
select video_id,
# sum(if(timestampdiff(second, start_time, end_time) >= duration, 1, 0)) / count(1) '视频完播率',
# sum(if_like) '点赞数',
# count(comment_id) '评论数',
# sum(if_retweet) '转发数',
# if(count(video_id) = 0,
# datediff(date((select max(end_time) from tb_user_video_log)), date(release_time)),
# datediff(date((select max(end_time) from tb_user_video_log)), max(date(end_time)))) '最近无播放天数',
round(
( sum(if(timestampdiff(second, start_time, end_time) >= duration, 1, 0)) / count(1) * 100 -- 视频完播率 * a (a=100)
+ sum(if_like) * 5 -- 点赞数 * b (b=5)
+ count(comment_id) * 3 -- 评论数 * c (c=3)
+ sum(if_retweet) * 2 -- 转发数 * d (d=2)
) * ( 1 / ( if(count(video_id) = 0, -- 出题人埋坑,考虑最近无播放记录的,以上传日期截止计算天数
datediff(date((select max(end_time) from tb_user_video_log)), date(release_time)),
datediff(date((select max(end_time) from tb_user_video_log)), max(date(end_time)))) + 1 ) ) -- 新鲜度 = 1 / (最近无播放天数 + 1)
, 0) as hot_index -- 热度=(a*视频完播率+b*点赞数+c*评论数+d*转发数)*新鲜度
from tb_user_video_log t1
left join tb_video_info using (video_id)
where date(release_time) >= (select date_sub(date(max(end_time)), interval 29 day) today_dt from tb_user_video_log)
group by video_id
order by hot_index desc
limit 3;
查看15道真题和解析