题解 | #近一个月发布的视频中热度最高的top3视频#
近一个月发布的视频中热度最高的top3视频
https://www.nowcoder.com/practice/0226c7b2541c41e59c3b8aec588b09ff
with LastDate as (
select Max(end_time) as Last_time
from tb_user_video_log
),
vLog as (
select
t1.video_id,
avg(
case
when timestampdiff (second, t1.start_time,t1.end_time) >= t2.duration then 1
else 0
end
) as complete_rate,# timestapdiff start ahead end_time
sum(t1.if_like) as thumb_cnt,
count(t1.comment_id) as subscribe_cnt,
sum(t1.if_retweet) as repost_cnt,
min(
datediff (
(
select
Last_time
from
LastDate
), t1.end_time
)
) as fresh_rate
from
tb_user_video_log t1
join tb_video_info t2 on t1.video_id = t2.video_id
where
t2.release_time >= date_sub((select Last_time from LastDate), Interval 29 Day)
group by
t1.video_id
)
# select
# video_id,
# (
# complete_rate * 100 + thumb_cnt * 5 + subscribe_cnt * 3 + 2 * repost_cnt
# ) / (fresh_rate + 1) as hot_index
# from
# vLog
# group by
# video_id
# order by
# video_id,
# hot_index desc
# limit
# 3;
select video_id,round(((
complete_rate * 100 + thumb_cnt * 5 + subscribe_cnt * 3 + 2 * repost_cnt
) / (fresh_rate + 1)),0) as hot_index
from vLog
order by
hot_index desc
limit
3;
- 首先要注意Datediff 和TimestampDiff 区别, TimestampDiff 要把开始时间放在end_time 前面,Datediff要反过来
- 要注意审题,确定order by 的要求
- 思路是首先单独找出全局最近的发布时间,其次对于每个视频找出以下参数。完播率是指开始结束的时间差大于duration,最近未播放天数可以设置为间隔最短的结束天和全局最近发布天
- 一个未理解点在于为什么一个视频一个用户多次观看,点赞数可以被允许反复统计?按理说一个用户只能点一次赞

