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

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

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

#这个题总体来说,正确率很低的原因就是:如果不看它的“解释”,这个题乍一看确实有点奇怪。你说我最近发布的,怎么可能有一个月的播放数据呢。原来作者在“解释”中描述最大的当前时间是tb_user_video_log 中的max(end_time),用这个max(end_time)去找到release_time 在30天内的video,再用这个结果去join tb_user_video_log 表。

fresh rate 这个 一定要用 end_time 我他妈找半天,就是这里用错了,写成了start_time 导致错误

第一层计算基本计算需要的字段,第二层计算统计结果,分两层的目的主要是为了让 语句看起来更简单一点

select

    d.video_id, format((100*d.disFullRate + 5*d.likeNum + 3*d.commNum + 2*d.retweetNum)*d.freshRate,0) as hot_index
from 
(
    select
        a.video_id,avg(case when (UNIX_TIMESTAMP(a.end_time) - unix_timestamp(a.start_time)) >= c.duration then 1 else 0 end) as disFullRate,
        sum(a.if_like) as likeNum,
        sum(case when a.comment_id is not null then 1 else 0 end) as commNum,
        sum(if_retweet) as retweetNum,
        1/(datediff(max(b.end_time),max(a.end_time)) + 1) as freshRate
        from  
        (select max(end_time) as end_time from tb_user_video_log) b 
        join tb_video_info c on date_format(c.release_time,'%Y%m%d') >=  date_format(date_sub(b.end_time, interval 29 day),'%Y%m%d')
        join tb_user_video_log a on a.video_id = c.video_id
    group by a.video_id
) d 
order by hot_index*1 desc limit 3

全部评论

相关推荐

牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务