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