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

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

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

# 先找到近一个月的记录,并且使用case when看每一个记录是否完全播放
with t1 as (
    select a.uid, a.video_id, a.if_follow, a.if_like, b.release_time, a.if_retweet, a.comment_id, a.end_time, 
    (case when timestampdiff(second, a.start_time, a.end_time) < b.duration then 0 else 1 end) as if_over
    from tb_user_video_log as a
    left join tb_video_info as b
    on a.video_id = b.video_id
    where release_time between (select date_sub(max(date_format(end_time, '%Y-%m-%d')), interval 29 day) from tb_user_video_log) 
    and (select max(date_format(end_time, '%Y-%m-%d')) from tb_user_video_log)
),
t2 as (
# 计算每一个视频的完播率,新鲜度, 点赞数,评论数,转发数, 新鲜度
    select video_id, sum(if_over) / count(*) as over_rate, sum(if_like) as like_cnt, sum(if(comment_id is null, 0, 1)) as comment_cnt, sum(if_retweet) as retweet_cnt, 
    1 / (timestampdiff(day, max(date_format(end_time, '%Y-%m-%d')), (select max(date_format(end_time, '%Y-%m-%d')) from tb_user_video_log)) + 1) as new_rate
    from t1
    group by video_id
)
# 计算每个视频的热度
select video_id, round((100 * over_rate + 5 * like_cnt + 3 * comment_cnt + 2 * retweet_cnt) * new_rate, 0) as hot_index
from t2
order by hot_index desc
limit 3;

全部评论

相关推荐

04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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