题解 | 平均播放进度大于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)’,‘后时间’,‘前时间’)
查看10道真题和解析