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

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

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

WITH tongji AS (
    SELECT
        a.uid,
        a.video_id,
        b.tag,
        CASE 
            WHEN TIMESTAMPDIFF(SECOND,a.start_time,a.end_time)/ b.duration > 1 THEN 1.0
            ELSE TIMESTAMPDIFF(SECOND,a.start_time,a.end_time) / b.duration
        END AS shichang
    FROM
        tb_user_video_log AS a
    LEFT JOIN tb_video_info AS b 
        ON a.video_id = b.video_id
    WHERE
        b.duration IS NOT NULL
)
SELECT
    tag,
    CONCAT(ROUND(AVG(shichang) * 100, 2),'%' )AS avg_play_progress
FROM
    tongji
GROUP BY
    tag
HAVING
    ROUND(AVG(shichang) * 100, 2)>60
ORDER BY
    avg_play_progress DESC;
	
	这道题分为三步
	1 查询每条记录的视频播放进度(注意判断当播放时长大于视频时长的时候播放进度为1,封顶,而不是继续上涨)
	2 进行分组聚合求每个视频类型的平均播放进度
	3 利用HAVING在分组后进行筛选出平均进度大于60%的
	注意:不要利用时间戳直接相减,得用timestampdiff函数来确保 ,用法为timestampdiff(‘需要格式(second、hour、day、month、year)’,‘后时间’,‘前时间’)

全部评论
播放进度封顶处理很关键
点赞 回复 分享
发布于 2025-06-19 21:54 美国
这道题用到了with临时表
点赞 回复 分享
发布于 2025-06-19 21:54 美国

相关推荐

01-17 11:57
已编辑
门头沟学院 前端工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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