SQL 统计视频热度:计算最近无播放天数及播放次数
SQL 统计视频热度:计算最近无播放天数及播放次数
以下 SQL 语句旨在统计视频热度,包括最近无播放天数、播放次数、点赞数、评论数等指标。
select
video_id,
sum(if_fin) as fin_sum,
sum(if_like) as like_sum,
sum(if_retweet) as rtwt_sum,
count(comment_id) as comment_sum,
count(start_time) as play_sum, # 使用 count(start_time) 计算播放次数
datediff(max(date(end_time)), (select(max(date(end_time)) from tb_user_video_log))) as no_play_days
#从tb_user_video_log表中,选出整个表最大的end_date, 和各个视频的最大的end_date相减,就得到了最近没有播放的天数
from
(select
v.video_id,
case when timestampdiff(second, u.start_time, u.end_time) >= duration then 1 else 0 end as if_fin,
u.if_like,
u.comment_id,
u.if_retweet,
u.start_time,
u.end_time
from
tb_user_video_log as u
join tb_video_info as v
on u.video_id = v.video_id) as t1 #1.找出视频id,是否播放完成,以及其他需要计算热度用的参数,搞一个表叫做t1
group by video_id
优化建议:
-
计算播放次数: 原代码缺少计算播放次数的逻辑。在
t1中已有start_time和end_time,可以通过这两个时间计算出播放次数,并将结果加入select语句中。 -
使用更简洁的计算方式: 可以使用更简洁的计算方式来获取最近无播放天数。例如,直接使用
datediff(max(date(end_time)), min(date(end_time)))来计算每个视频最后一次播放时间和第一次播放时间之间的天数差,避免使用子查询。 -
优化代码可读性: 使用更清晰的注释,并对代码进行适当的格式化,提高代码的可读性。
其他优化思路:
- 可以考虑使用 window function 来简化代码,例如使用
LAG函数计算每个视频的最近一次播放时间。 - 可以使用 CTE (Common Table Expression) 来提高代码的可读性。
- 可以将 SQL 代码进行拆分,分成多个子查询,使代码更易于维护。
原文地址: https://www.cveoy.top/t/topic/ooMN 著作权归作者所有。请勿转载和采集!