SELECT
M.tag,
concat(
cast( ( sum( realTime ) / sum( M.duration ) * 100 ) AS DECIMAL ( 10, 2 ) ),
"%"
) as avg_play_progress
FROM
(
SELECT
tv.tag AS tag,
tv.video_id AS video_id,
LEAST( TIMESTAMPDIFF( SECOND, tu.start_time, tu.end_time ), tv.duration ) AS realTime,
tv.duration
FROM
tb_user_video_log tu
INNER JOIN tb_video_info tv ON tu.video_id = tv.video_id
) M
GROUP BY
M.tag
HAVING
sum( realTime ) / sum( M.duration ) > 0.6
ORDER BY avg_play_progress DESC