此题共包含两张表:
表1:用户-视频互动表tb_user_video_log
表2:短视频信息表tb_video_info
要解决的问题: 找出近一个月发布的视频中热度最高的top3视频。
解题思路: 找到近一个月发布的视频【T-29,T】 依据热度公式,拆解获取各项数据。视频完播率、点赞数、评论数、转发数及最近无播放天数 结果中热度保留为整数,并按热度降序排序。
select video_id, round((finished_rate + like_cnt + comment_count+retweet_cnt)*unfinished_day_cnt,0) hot_index -- ④ 求得最终结果
from(
select a.video_id video_id,
100*sum(if(TIMESTAMPDIFF(second,start_time,end_time) - duration >=0, 1, 0)) / count(*) finished_rate,
5*sum(if_like) like_cnt,
3*SUM(IF(comment_id IS NOT NULL, 1, 0)) comment_count,
2*sum(if_retweet) retweet_cnt,
1 / (DATEDIFF(DATE((SELECT MAX(end_time) FROM tb_user_video_log)), MAX(DATE(end_time)))+1) unfinished_day_cnt
-- ① 计算各要求指标,这里要额外注意最近无播放记录的计算,利用原表取最近值和分组结果取最近值,巧妙得到最近无播放记录的时间差
from tb_user_video_log a
left join tb_video_info b
on a.video_id = b.video_id
where DATEDIFF(date((select max(end_time) from tb_user_video_log)), date(release_time)) <= 29
-- ② 最近一个月无播放记录,题目里说要和发布时间作比较,所以这里后面的时间节点是release_time
group by a.video_id -- ③ 以video_id分组
) t1
order by hot_index desc
limit 3 -- ⑤ 排序,取前3