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

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

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

-- 1、找到近一个月发布的视频。 先计算出当天时间,再通过datediff 计算差值 小于等于29,避免了2次范围限定。但是在大数据环境下不可取,无法通过分区字段快速查找数据。
-- 2、计算热度。  热度是针对某个视频而言,应该聚合来算
-- 3、 优化完播率。 使用avg 计算比率,使用timestampdiff 计算间隔
-- 4、date使用。 如果使用了子查询,应该多加个扩号包裹起来。


SELECT
	video_id,
	round(
		(
			100 * watch_avg + 5 * like_cnt + 3 * comm_cnt + 2 * retweet_cnt
		) / (fresh_cnt + 1)
	) AS hot
FROM
	(
		SELECT
			t1.video_id,
			avg(
				TIMESTAMPDIFF(SECOND, start_time, end_time) >= duration
			) AS watch_avg,
			sum(if_like) AS like_cnt,
			sum(if_retweet) AS retweet_cnt,
			DATEDIFF(
				(
					SELECT
						DATE(max(end_time))
					FROM
						tb_user_video_log
				),
				date(max(end_time))
			) AS fresh_cnt,
			count(comment_id) AS comm_cnt
		FROM
			tb_user_video_log t1
		LEFT JOIN tb_video_info t2 USING (video_id)
		WHERE
			DATEDIFF(
				date(
					(
						SELECT
							max(end_time)
						FROM
							tb_user_video_log
					)
				),
				date(release_time)
			) <= 29
		GROUP BY
			t1.video_id
	) t3
ORDER BY
	hot DESC
LIMIT 3

全部评论

相关推荐

11-11 22:08
佛山大学 Java
点赞 评论 收藏
分享
10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-04 05:12
kalistar:简历留六个字,北京大学(本科),黑体加粗,看看哪个hr不长眼敢碰瓷我们北大✌
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务