题解 | #牛客直播各科目出勤率#
牛客直播各科目出勤率
https://www.nowcoder.com/practice/0cab547df4f0430b93042128f445d899
# 4/17 10:43 ~
# 字段:course_id、course_name、attend_rate(%)
# 出勤率 = 出勤人数(在线时长10分钟以上) / 报名人数
# tb1:出勤人数, 按照user_id、course_id分组,统计出勤时间
with tb1 as (
select user_id,course_id,course_name,sum(timestampdiff(second,in_datetime,out_datetime)) as on_time,if_sign
from attend_tb left join course_tb using(course_id)
left join behavior_tb using(user_id,course_id)
# 统计课程开始后进入的用户
# where course_datetime between in_datetime and out_datetime or course_datetime < out_datetime
group by user_id,course_id,course_name,if_sign
),
# tb2:出勤人数
tb2 as(
select course_id,course_name,count(user_id) as attend_num
from tb1
where on_time > 600
group by course_id,course_name
),
# tb3:报名人数
tb3 as(
select course_id, count(if_sign) as sign_num
from behavior_tb
where if_sign = 1
group by course_id
)
select course_id,course_name,round(100*attend_num/sign_num,2) as attend_rate
from tb2 left join tb3 using(course_id)
# 注意点:报名人数和出勤人数的表不能用同一原始表

