题解 | #国庆期间每类视频点赞量和转发量#思路清晰的很

国庆期间每类视频点赞量和转发量

http://www.nowcoder.com/practice/f90ce4ee521f400db741486209914a11

1.每类视频每天近一周内的最大单天转发量

select t1.tag,t1.d,
max(t1.if_retweet_sum)over(partition by t1.tag order by t1.d rows 6 preceding)
from (select tag,date(start_time) d,sum(if_retweet) if_retweet_sum
      from tb_user_video_log tvl,tb_video_info tvi
      where tvl.video_id=tvi.video_id
      group by tag,d) as t1

2.每类视频每天的近一周总点赞量

select t1.tag,t1.d,
sum(t1.if_like_sum)over(partition by t1.tag order by t1.d rows 6 preceding)
from (select tag,date(start_time) d,sum(if_like) if_like_sum
      from tb_user_video_log tvl,tb_video_info tvi
      where tvl.video_id=tvi.video_id
      group by tag,d) as t1

注意:这里求最大单天转发量和总点赞量时注意要先根据tag和start_time分组求和,因为用户-视频互动表里面存在时间相同的记录

将上述查询到的两个表可以进行连接,但是这里我采用另一种合并思路,可以发现最大单天转发量和总点赞量的计算都可以经过一个字段基本相同的表,所以将这两个来源表的字段取一个并集得到最终代码的t1表,将总点赞量和最大单天转发量展现在一张表中,最终得到每类视频每天的近一周总点赞量和一周内最大单天转发量

3.最后筛选出来国庆头三天的记录即可

select t2.*
from (select t1.tag,t1.d
      ,sum(t1.if_like_sum)over(partition by t1.tag order by t1.d rows 6 preceding)
      ,max(t1.if_retweet_sum)over(partition by t1.tag order by t1.d rows 6 preceding)
      from (select tag,date(start_time) d
            ,sum(if_like) if_like_sum
            ,sum(if_retweet) if_retweet_sum
            from tb_user_video_log tvl,tb_video_info tvi
            where tvl.video_id=tvi.video_id
            group by tag,d) as t1
     ) as t2
where t2.d between '2021-10-01' and '2021-10-03'
order by t2.tag desc,t2.d

如果可以继续优化,写在评论区,我会采纳并更新

全部评论
select * from (select tag,date(start_time)dt, sum(sum(if_like)) over(PARTITION BY tag ORDER BY date(start_time) DESC ROWS BETWEEN CURRENT ROW AND 6 FOLLOWING) sum_like_cnt_7d, max(sum(if_retweet)) over(partition by tag order by date(start_time) desc rows between current row and 6 following) max_retweet_cnt_7d from tb_user_video_log left join tb_video_info using(video_id) group by tag,date(start_time) order by date(start_time) desc)a where dt between "2021-10-01" and "2021-10-03" order by tag desc,dt;
1 回复 分享
发布于 2022-05-28 19:59
为什么还需要再套一层 select t2.* ?请大神答疑解惑
1 回复 分享
发布于 2021-12-20 15:51
觉得:可以不用三层嵌套。如果把where用having替代的话,一层就够了。
点赞 回复 分享
发布于 2022-12-09 15:53 广东
select * from ( select tag ,date_format(start_time,'%Y-%M_%D') as dt ,sum(case when if_like =1 then 1 else 0 end) over (partition by tag order by date_format(start_time, '%Y-%M_%D') range between rows 6 perceding and current_raw) as like_cnt ,max(case when if_like =1 then 1 else 0 end) over (partition by tag rder by date_format(start_time, '%Y-%M_%D') range between rows 6 perceding and current_raw) as like_cnt ,as retween_cnt from tb_user_video_log as t1 left join tb_video_info as t2 on t1.video_id = t2.video_id ) where date_format(start_time,'%Y-%M_%D') in ('20211001','20211002','20211003') order by tag desc,dt
点赞 回复 分享
发布于 2022-12-09 15:51 广东
请问有没有大佬告诉我,为什么一模一样的代码在最内层表连接时用左连接不行,用where 连接就对呢?
点赞 回复 分享
发布于 2022-09-16 21:26 湖北
原来还可以这样join表吗
点赞 回复 分享
发布于 2022-07-11 09:18
select tag,dt,sum_like_cnt_7d,max_retweet_cnt_7d from( select tag,date(end_time) dt, sum(sum(if_like)) over(partition by author order by date(end_time) rows 6 preceding) as sum_like_cnt_7d, max(sum(if_retweet)) over(partition by author order by date(end_time) rows 6 preceding) as max_retweet_cnt_7d from tb_user_video_log left join tb_video_info using(video_id) group by tag,dt) t1 where dt>='2021-10-01' and dt<='2021-10-03' order by tag desc,dt 请问这样为什么不可以呀
点赞 回复 分享
发布于 2022-04-21 14:35
大佬你好,请问嵌套的第二层窗口函数中为什么order by t1.d 后面不能有desc 呢?
点赞 回复 分享
发布于 2022-01-28 23:47
为什么max over 与sum over 里面不加6 preceding and current row?就是把current row加上,一周不是7天么?
点赞 回复 分享
发布于 2021-12-22 18:12

相关推荐

船长想实习:我啥技术不会决定去试试,然后进去也不干活就搅局可以吗?
点赞 评论 收藏
分享
行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
86
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务