题解 | #近一个月发布的视频中热度最高的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,代码如上