题解 | #平均播放进度大于60%的视频类别#

平均播放进度大于60%的视频类别

https://www.nowcoder.com/practice/c60242566ad94bc29959de0cdc6d95ef

我写的是一个三层select语句,第一层选出需要的数据:
select uid, tl.video_id, tag, duration, timestampdiff(second,start_time,end_time) as duration_a,
    if((timestampdiff(second,start_time,end_time))>duration, 1, ((timestampdiff(second,start_time,end_time))/duration)) as play_progress
from tb_user_video_log tl
left join tb_video_info ti on tl.video_id = ti.video_id;
第二层计算平均播放进度avg_play_progress1,并选取平均播放进度大于60%的视频类别,将数据按倒序排列:
select tag, avg(play_progress) as avg_play_progress1
from(select uid, tl.video_id, tag, duration, timestampdiff(second, start_time, end_time) as duration_a,
       if((timestampdiff(second,start_time,end_time))>duration, 1, ((timestampdiff(second,start_time,end_time))/duration)) as play_progress
   from tb_user_video_log tl
   left join tb_video_info ti on tl.video_id = ti.video_id
     ) tt
group by tt.tag
having avg_play_progress1 > 0.6
order by avg_play_progress1 desc;
最后一层按照要求将avg_play_progress以保留两位小数的百分比形式输出:
select tag, concat(round(avg_play_progress1*100,2),'%') as avg_play_progress
from(
      select tag, avg(play_progress) as avg_play_progress1
   from( 
           select uid, tl.video_id, tag, duration, timestampdiff(second,start_time,end_time) as duration_a,
          if((timestampdiff(second,start_time,end_time))>duration, 1, ((timestampdiff(second,start_time,end_time))/duration)) as play_progress
      from tb_user_video_log tl
      left join tb_video_info ti on tl.video_id = ti.video_id) tt
    group by tt.tag
   having avg_play_progress1 > 0.6
    order by avg_play_progress1 desc) ttt;


全部评论

相关推荐

程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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