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

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

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

差点自闭,个人认为这样子用一个with as可以避免嵌套过多,增加可读性,
第一步是先对各个指标拆解并且附加权重,第二步是计算热度值并且排序等等。
注意的点在于表格中的日期都带有时秒分,所以用date()处理去掉时秒分,不然结果就会是错误的。
with a as(
select 
    u.video_id,
    100*avg(
        if(timestampdiff(second, start_time, end_time)>=duration, 1, 0)
        )  as comp_val,
    5*Sum(if_like) as l_val,
    3*count(comment_id)  as c_val,
    # sum(if(comment_id is null,0,1)) * 3 as c_val, # count(字段)会计算非空字段
    2*Sum(if_retweet)  as r_val,
    1/(datediff((SELECT MAX(DATE(end_time)) FROM tb_user_video_log),max(date(end_time)))+1) as f_val
from tb_user_video_log u join tb_video_info i using(video_id) 
where date(release_time)>=date_sub((select date(max(end_time)) from tb_user_video_log),interval 29 day)
group by u.video_id
	)
select 
    video_id,
    round((comp_val+ l_val+ c_val+ r_val)*f_val) as hot_index
from a
order by hot_index desc
limit 3

全部评论

相关推荐

牛至超人:把哈工大,再加大加粗,看见闪闪发光的哈工大字样,面试官直接流口水
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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