每类视频近一个月的转发量/率

明确题意:

计算每类视频在有用户互动的最近一个月(按包含当天在内的近30天算)中的转发量和转发率。结果按转发率降序排序


问题分解:

  • 关联用户-视频互动记录和短视频信息表:JOIN tb_video_info USING(video_id);
  • 筛选最近30天的记录:
    • 找到今天的日期:MAX(DATE(start_time)
    • 往过去推移30天:DATE_SUB(MAX(DATE(start_time)), INTERVAL 30 DAY)
    • 筛选最近的:WHERE DATE(start_time) > (SELECT DATE_SUB(MAX(DATE(start_time)), INTERVAL 30 DAY) FROM tb_user_video_log)
  • 按视频类别分组:GROUP BY tag
  • 计算每个类别的转发量:SUM(if_retweet)
  • 计算每个类别的转发率(转发率=转发量÷播放量):SUM(if_retweet) / COUNT(1)
  • 保留3位小数:ROUND(x, 3)

细节问题:

  • 表头重命名:as
  • 按转发率倒序排序:ORDER BY retweet_rate DESC;

完整代码:

SELECT tag, SUM(if_retweet) as retweet_cnt,
    ROUND(SUM(if_retweet) / COUNT(1), 3) as retweet_rate
FROM tb_user_video_log
JOIN tb_video_info USING(video_id)
WHERE DATE(start_time) > (
    SELECT DATE_SUB(MAX(DATE(start_time)), INTERVAL 30 DAY)
    FROM tb_user_video_log
)
GROUP BY tag
ORDER BY retweet_rate DESC;