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

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

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

select  
    video_id,
    round((finish_rate+like_cnt+count_cnt+retweet_cnt)*(1/(fresh_cnt+1)) ,0)as hot_index from (
    select
    video_id,
    sum(if(timestampdiff(second,start_time,end_time)>=duration,1,0))*100/count(1) as finish_rate,
    DATEDIFF(DATE((SELECT MAX(end_time) FROM tb_user_video_log)),
    MAX(DATE(end_time))) fresh_cnt,#求出每个video最大的结束日期和整张表最大的结束日期的时间差值
    sum(if_like)*5 as like_cnt,#点赞总数换算成热度
    count(comment_id)*3 count_cnt,#评论总数换算成热度
    sum(if_retweet)*2 retweet_cnt#转发总数换算成热度
from
    tb_user_video_log
     join tb_video_info using (video_id)
where
    date_format (release_time, '%Y-%m-%d') > DATE_SUB((select date_format(max(start_time),'%Y-%m-%d') from tb_user_video_log), INTERVAL 29 DAY)
    # DATEDIFF(DATE((SELECT MAX(end_time) FROM tb_user_video_log)), DATE(release_time)) <= 29
group by video_id
) t1
order by hot_index desc 
limit 3


#  SELECT
#     i.video_id,
#     SUM(TIMESTAMPDIFF(second, start_time, end_time) >= duration) / COUNT(*) finished_rate,
#     SUM(if_like = 1) like_cnt,
#     SUM(IF(comment_id IS NOT NULL, 1, 0)) comment_count,
#     SUM(if_retweet = 1) retweet_cnt,
#     DATEDIFF(DATE((SELECT MAX(end_time) FROM tb_user_video_log)), MAX(DATE(end_time))) unfinished_day_cnt
#   FROM tb_video_info i
#   JOIN tb_user_video_log USING(video_id)
#   WHERE DATEDIFF(DATE((SELECT MAX(end_time) FROM tb_user_video_log)), DATE(release_time)) <= 29
#   GROUP BY 1

本题主要是内容比较难懂,其他部分不怎么困难,可以选择datediff 或者timestampdiff来对一个月的区间进行计算,当然也可以选择date_sub,代码如上

全部评论

相关推荐

04-13 18:10
门头沟学院 Java
想熬夜的小飞象在秋招:被腾讯挂了后爸妈以为我失联了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务