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

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

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

WITH t1 AS(
    SELECT
        t1.video_id,
        SUM(if_like) AS like_cnt,
        SUM(IF(comment_id IS NULL, 0, 1)) AS comment_cnt,
        SUM(if_retweet) AS retweet_cnt,  
        AVG(IF(TIMESTAMPDIFF(second, start_time, end_time) >= duration, 1, 0)) AS finish_rate,
        1 / (DATEDIFF((SELECT DATE(MAX(end_time)) FROM tb_user_video_log), DATE(MAX(end_time))) + 1)  AS fresh_rate
    FROM tb_user_video_log t1
    JOIN tb_video_info t2 ON t1.video_id = t2.video_id
    WHERE release_time >= DATE_ADD((SELECT DATE(MAX(end_time)) FROM tb_user_video_log), INTERVAL -29 DAY) 
    GROUP BY t1.video_id
)

SELECT
    video_id,
    ROUND((100*finish_rate + 5*like_cnt + 3*comment_cnt + 2*retweet_cnt) * fresh_rate, 0) AS hot_index
FROM t1
ORDER BY hot_index DESC
LIMIT 3

总体思路为按照题干里提到的几个元素一个一个算。点赞数、评论数、转发数和 完播率都可以使用聚合函数 + IF条件解决。新鲜率需要计算一个时间差,需要注意要提取所有记录中某属性的最大值不能直接使用MAX,而是应该用一个小的子查询括起来,本题中是(SELECT DATE(MAX(end_time)) FROM tb_user_video_log),在下面的WHERE过滤条件中也是如此。

在把需要使用的字段全部准备好之后,在主查询中按照公式计算出热度,再排序和选取前三条记录即可。

全部评论

相关推荐

数学转码崽:一直给我推,投了又不理,理了又秒挂
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 听劝,这个简历怎么改 #
14102次浏览 183人参与
# 面试被问“你的缺点是什么?”怎么答 #
6486次浏览 100人参与
# 水滴春招 #
16593次浏览 358人参与
# 入职第四天,心情怎么样 #
11331次浏览 63人参与
# 租房找室友 #
8035次浏览 53人参与
# 读研or工作,哪个性价比更高? #
26176次浏览 356人参与
# 职场新人生存指南 #
199273次浏览 5510人参与
# 参加完秋招的机械人,还参加春招吗? #
27030次浏览 276人参与
# 文科生还参加今年的春招吗 #
4122次浏览 31人参与
# 简历无回复,你会继续海投还是优化再投? #
48634次浏览 561人参与
# 你见过最离谱的招聘要求是什么? #
144723次浏览 829人参与
# 如果重来一次你还会读研吗 #
155720次浏览 1706人参与
# 机械人选offer,最看重什么? #
69078次浏览 449人参与
# 选择和努力,哪个更重要? #
44323次浏览 493人参与
# 如果再来一次,你还会学硬件吗 #
103650次浏览 1245人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
20526次浏览 414人参与
# 招聘要求与实际实习内容不符怎么办 #
46769次浏览 494人参与
# 22届毕业,是读研还是拿外包offer先苟着 #
4652次浏览 27人参与
# 你们的毕业论文什么进度了 #
901330次浏览 8961人参与
# 软开人,你觉得应届生多少薪资才算合理? #
81380次浏览 496人参与
# 国企还是互联网,你怎么选? #
109200次浏览 853人参与
牛客网
牛客企业服务