题解 | #每类视频近一个月的转发量/率#
每类视频近一个月的转发量/率
http://www.nowcoder.com/practice/a78cf92c11e0421abf93762d25c3bfad
有用户互动的最近一个月: 先找最大的那一天,然后between 这一天and (这一天-30)
播放量 就是count(st_time)
思路 先取出最近一个月的数据,然后再进行统计计算
犯的错误是 像max min avg这类函数 如果有group by 的情况下 不一定是固定的值,系统会产生一个问题就是:无法分类
还有一个问题是 如果代码和题解的代码一样 肯定就是那地方的细节问题没有处理好,比如经常犯的多写了些前缀或者忘记加前缀的问题
还有就是一定要注意 round的问题 仔细阅读题目啊!
还有avg的问题 题目真的会给出你该选什么样的函数去计算的啊!
考虑某一天之前的一个月内 或者多少天内,用时差函数真的是一种优解啊 但是思路挺清奇的,感觉需要时间沉淀一些题目才能有这样的思路
#select t1.tag,
# sum(t1.if_retweet) as retweet_cut,
# sum(t1.if_retweet) / count(t1.start_time) as retweet_rate
#from
#(
# select vi.tag,
# vl.uid,
# vl.video_id,
# vl.start_time,
# vl.if_retweet
# from tb_user_video_log vl
# join tb_video_info vi using(video_id)
# where (vl.if_follow <> 0 or vl.if_like <> 0 or vl.if_retweet <> 0 or vl.comment_id <> 0)
# and (date_format(vl.start_time,'%Y%m%d') between max(date_format(vl.start_time,'%Y%m%d')) and (max(date_format(vl.start_time,'%Y%m%d')) - 30))
#) t1
#group by t1.tag
#order by retweet_rate desc
# 有用户互动的最近一个月: 先找最大的那一天,然后between 这一天and (这一天-30)
# 播放量 就是count(st_time)
# 思路 先取出最近一个月的数据,然后再进行统计计算
select vi.tag,
sum(vl.if_retweet) as retweet_cut,
round(avg(vl.if_retweet),3) as retweet_rate
# round(sum(vl.if_retweet) / count(vl.start_time),3) as retweet_rate
from tb_user_video_log vl
join tb_video_info vi using(video_id)
#where (vl.if_follow <> 0 or vl.if_like <> 0 or vl.if_retweet <> 0 or vl.comment_id <> 0)
#and
#where date_format(vl.start_time,'%Y%m%d') between max(date_format(vl.start_time,'%Y%m%d')) and (max(date_format(vl.start_time,'%Y%m%d')) - 30)
where timestampdiff(day,vl.start_time,(select max(start_time)
from tb_user_video_log
)) <= 29
group by vi.tag
order by retweet_rate desc