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

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

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

select t2.tag,
concat(
    round(avg(if(
        timestampdiff(second, t1.start_time, t1.end_time) > t2.duration,
        1,
        timestampdiff(second, t1.start_time, t1.end_time) / t2.duration))* 100,2),
    '%')
as avg_play_progress
from tb_user_video_log as t1
join tb_video_info as t2
on t1.video_id=t2.video_id
group by t2.tag
having substring_index(avg_play_progress,'%',1)>60
order by avg_play_progress desc

# 首先group by肯定是tag,因为要求各类视频的平均播放进度,所以要按照类聚类。
# 还要用到having,因为需要对分组聚合之后的内容进行条件过滤(进度大于60%)

解题思路:

  • 首先看题目要求,要求计算各类视频的平均播放进度,将进度大于60%的类别输出。",所以首先要对视频类别进行分组,对每个类别的播放进度进行聚合。
  • "输出播放进度>60%的类别”,所以要对聚合之后的数进行筛选,用到having。(having的执行顺序在聚合函数之后)
  • 这里要输出百分比,所以用到了concat(a,b)-->"ab"
  • 在having的时候要进行筛选,所以要分离百分号和数字,用到substring_index(str,符号,第几位),以符号进行分割,返回分割后的第几位,相当于python里边的split函数,不过在mysql中,首位是1不是0。
  • timestampdiff(type,start_time,end_time)函数返回以type位单位的start_time和end_time差。
全部评论

相关推荐

整顿职场的柯基很威猛:这种不可怕,最可怕的是夹在一帮名校里的二本选手,人家才是最稳的。
点赞 评论 收藏
分享
一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务