1、分析题目:统计每个科目的出勤率(attend_rate(%),结果保留两位小数),出勤率=出勤(在线时长10分钟及以上)人数 / 报名人数 (1)在线时长10分钟及以上的人数:课程表course_tb & 上课情况表attend_tb 👉 每位用户的上课时长 & where条件筛选出在线时长>10min及以上的人; (2)(每个课程)报名人数:课程表course_tb & 用户行为表behavior_tb 👉 每个课程的报名人数情况 (3)将以上2个步骤做成2张临时表,然后按照 course_id 组合起来(原因:都是按照course_id作为第1个分组条件),进行统一计算 2、实操: (1)创建临时表a:计算在每个课程中,不同用户的在线时长,并筛选出 >10min 的用户 with a as( select t2.course_id, t2.user_id, t1.course_name, timestampdiff(minute, t2.in_datetime, t2.out_datetime) as condition1 from course_tb as t1 left join attend_tb as t2 on t1.course_id = t2.course_id where timestampdiff(minute, t2.in_datetime, t2.out_datetime) >= 10 group by 1,2,3,4 ), (2)创建临时表b:计算在每个课程中,用户的报名人数 b as( select t1.course_id, t1.course_name, sum(t2.if_sign) as condition2 from course_tb as t1 left join behavior_tb as t2 on t1.course_id = t2.course_id group by 1,2 ) (3)基于临时1、2表,并按照展示结果计算百分比: select a.course_id,a.course_name, round(count(distinct a.user_id) / b.condition2 * 100 , 2) as 'attend_rate(%)' from a left join b on a.course_id = b.course_id and a.course_name = b.course_name group by 1,2