问题:统计在有用户互动的最近一个月(按包含当天在内的近30天算,比如10月31日的近30天为10.2~10.31之间的数据)中,每类视频的转发量和转发率(保留3位小数)。

首先读题后发现不用建立新表,直接一次连接就可完成。因此我们先考虑如何选出最近一个月这个条件

where date(start_time)>date_sub((select date(max(end_time)) from tb_user_video_log),interval 30 day)

这个条件其实很容易想到,注意这里是用>还是>=,题目中有指出包含最近那一天在内的30天。

这类题我们不需要死记硬背,我们考虑就用最小的数字来类推即可。

如果是30号在内的2天内,那就是29和30号,我们需要date>30-2。同理,我们这里使用>即可。

其他的计算就比较简单 答案代码如下

select tag,sum(if_retweet) as rc,
round(sum(if_retweet)/count(start_time),3) as rr
from tb_user_video_log as a  join tb_video_info as b on a.video_id=b.video_id
where date(start_time)>
date_sub((select date(max(end_time)) from tb_user_video_log),
interval 30 day)
group by tag 
order by rr desc