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

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

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

 SELECT tag, CONCAT(avg_bfjd, "%") as avg_bfjd
FROM (
    SELECT tag,
        ROUND(AVG(
            IF(TIMESTAMPDIFF(SECOND, start_time, end_time) > duration, 1,
               TIMESTAMPDIFF(SECOND, start_time, end_time) / duration)
        ) * 100, 2) as avg_bfjd
    FROM tb_user_video_log
   left JOIN tb_video_info USING(video_id)
    GROUP BY tag
    HAVING avg_bfjd > 60
    ORDER BY avg_bfjd DESC
) as t_progress;

问题分解:

关联用户-视频互动记录和短视频信息表:tb_user_video_log a left JOIN tb_video_info b on a.video_id=b.video_id

计算每个类别的平均播放进度:

播放进度=播放时长÷视频时长*100%

播放时长=TIMESTAMPDIFF(SECOND, start_time, end_time);特殊情况:播放时长大于视频时长时,播放进度为100%(加个IF判断)

平均进度=AVG(每个进度)

如果播放时长大于视频时长,播放进度记为100% :IF(TIMESTAMPDIFF(SECOND, start_time, end_time) > duration, 1,

TIMESTAMPDIFF(SECOND, start_time, end_time) / duration)

结果保留2位小数:ROUND(x, 2)

百分比格式化:CONCAT(x, '%')

按视频类别分组:GROUP BY tag

筛选播放进度>60%的视频类别:HAVING avg_bfjd > 60

按播放进度倒序排序:ORDER BY avg_bfjd DESC

全部评论

相关推荐

02-25 19:38
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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