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_timeend_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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录