# 先统计每个用户的在线时长
with a as(
select
user_id,
course_id,
sum(timestampdiff(second,in_datetime,out_datetime)) as zaixian
from
attend_tb
group by
user_id,course_id
having
zaixian/60>=10
),
b as(
select
course_id,
sum(if_sign) as baoming
from
behavior_tb
group by
course_id
),
c as (
select
course_id,
count(distinct user_id) as zaixiannum
from
a
group by
course_id
),
d as (
select
ct.course_id,ct.course_name,
round(100*c.zaixiannum/b.baoming,2) as attend_rate
from
course_tb as ct
left join c on ct.course_id = c.course_id
left join b on ct.course_id = b.course_id
order by
ct.course_id
)
select * from d