WITH t AS ( SELECT CASE
WHEN
TIMESTAMPDIFF( SECOND, t1.start_time, t1.end_time ) >= t2.duration THEN
100 ELSE TIMESTAMPDIFF( SECOND, t1.start_time, t1.end_time ) * 100 / t2.duration
END AS totaltime,
t2.tag
FROM
tb_user_video_log t1
LEFT JOIN tb_video_info t2 ON t1.video_id = t2.video_id
) SELECT
t.tag,
concat( ROUND( avg( t.totaltime ), 2 ), "%" ) AS avg_play_progress
FROM
t
GROUP BY
tag
HAVING
avg(t.totaltime) > "60%"
ORDER BY avg_play_progress DESC;
解题思路:
1.以设备id为连接字段左连接两表得到一张临时表,表字段含有播放时速、类别。
2.按照类别分组,对分组后过滤掉类别均值小于60%的记录行,表字段包含类别、平均播放时长。最后对平均播放时长降序排序。