一、题目解读

没啥难的知识点,这题的难点在题目理解上了。统计在有用户互动的最近一个月”就这句话真是理解了太久了。。。裂开。
  • 坑1:日期之间的差是29天
  • 坑2:max(star_time)是所有日期中的最大值,不按照类目做聚类。

二、解题步骤。

1)统计在有用户互动的最近一个月,(按包含当天在内的近30天算,比如10月31日的近30天为10.2~10.31之间的数据)
  • 由解释可知,转存日期为最新日期
MAX(start_time)
  • 最近1个月按照30天来算即日期,从上面括号里的内容可知两个日子差29天
DATEDIFF(MAX(start_time),start_time)<=29
  • MAX(start_time) 是所有数据的最大值,即为
DATEDIFF((SELECT MAX(start_time) FROM tb_user_video_log),start_time)<=29

2)每类视频的转发量和转发率(保留3位小数),转发率=转发量÷播放量。

  • 转发量=每一类视频转发数量求和
  • SUM(if_retweet) #转发量
  • COUNT(start_time) #播放量
  • SUM(if_retweet)/COUNT(start_time) #转发率
SELECT SUM(if_retweet) retweet_cut,COUNT(start_time), ROUND(SUM(if_retweet)/COUNT(start_time),3) retweet_rate 
FROM tb_user_video_log GROUP BY video_id;

3)结果按转发率降序排序。
SELECT tag,SUM(if_retweet) retweet_cut,ROUND(SUM(if_retweet)/COUNT(start_time),3) retweet_rate 
FROM tb_user_video_log a LEFT JOIN tb_video_info b ON a.video_id=b.video_id
WHERE DATEDIFF((SELECT MAX(start_time) FROM tb_user_video_log),start_time)<=29 #这里最浪费时间,从当日开始往前推30天,30天内的数据
GROUP BY tag
ORDER BY retweet_rate DESC;