with
    t1 as (
        select
            class_id,
            count(student_id) as learners_enrolled
        from
            course_enroll_
        group by
            class_id
    ),
    t2 as (
        select
            class_id,
            count(distinct student_id) as learners_active_m,
            COUNT(
                DISTINCT CASE
                    WHEN finished_flag = 1 THEN student_id else null
                END
            ) as finishers_m,
            sum(watch_minutes) as total_minutes_m
        from
            study_logs_
        where date(log_ts) between '2024-08-01' and '2024-08-31'
        group by
            class_id
    )
select
    cc.class_id,
    course_id,
    teacher_id,
    t1.learners_enrolled,
    ifnull(t2.learners_active_m, 0) as learners_active_m,
    ifnull(t2.finishers_m, 0) as finishers_m,
    COALESCE(ROUND(finishers_m / NULLIF(learners_active_m, 0), 2), 0.00) as completion_rate,
    ifnull(total_minutes_m, 0) as total_minutes_m,
    COALESCE(ROUND(IFNULL(total_minutes_m, 0) / NULLIF(learners_active_m, 0), 2), 0.00) as avg_minutes_per_active,
    RANK() over (
        partition by
            cc.course_id
        order by
            total_minutes_m / learners_active_m desc
    ) as rank_in_course
from
    course_class_ cc
    left join t1 on t1.class_id = cc.class_id
    left join t2 on t2.class_id = cc.class_id
order by
    course_id,
    rank_in_course,
    class_id;