WITH                -- 使用CTE
wb AS (             -- 先关联两张表,然后计算出每个视频的播放进度
    SELECT
        u.uid,u.video_id,v.tag,v.duration
        ,CASE
            WHEN TIMESTAMPDIFF(SECOND,u.start_time,u.end_time) >= v.duration THEN 1     -- 把播放时间转换为秒,并且播放时间超过视频长度的播放率记作1
            WHEN TIMESTAMPDIFF(SECOND,u.start_time,u.end_time) < v.duration THEN TIMESTAMPDIFF(SECOND,u.start_time,u.end_time) *1.0 / v.duration
            /*播放时间小于视频长度的,以播放时长/视频长度计算播放进度,这里加*1.0是为了保证计算精度,不加可能导致计算结果错误*/
            ELSE 0 END AS jindu     -- 防止出现灵异现象
    FROM tb_user_video_log AS u
    INNER JOIN tb_video_info AS v
        ON u.video_id = v.video_id
)

SELECT
    tag,
    CONCAT(     -- 在计算结果后加上%符号
        ROUND(AVG(jindu) * 100,2)       -- 保留小数点后两位数,题干没有要求,但是输出示例是这样
    ,'%') AS avg_play_progress
FROM wb
GROUP BY tag
HAVING  AVG(jindu) > 0.6                -- 只输出平均播放进度在60%以上的视频
ORDER BY avg_play_progress DESC;        -- 按照视频的平均播放进度降序,题干没有要求,但是输出示例是这样