题解 | #平均播放进度大于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差。
全部评论

相关推荐

榕城小榕树:1200单休,我去干点啥别的不好
点赞 评论 收藏
分享
码农索隆:有点耳熟,你们是我教过最差的一届
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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