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

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

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

此题共包含两张表:

表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
全部评论

相关推荐

会非的杨:吓死了,看到我的评论以为自己被网暴了,那哥们说白了就是吃了黑流量还要倒打一耙喷他的,自己都说了想吃黑流量,然后又说网友不友好,md这不左右脑互搏吗,拿个蓝桥杯省二说要冲大厂,起号和父母不能同时存在
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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