题解 | #牛客直播各科目出勤率#
牛客直播各科目出勤率
http://www.nowcoder.com/practice/0cab547df4f0430b93042128f445d899
简单直接的代码,效率不高,解释性强
注意:
1、报名的人不一定出现在attent_tb中,所以报名人数只能来自于behavior表 2、既然是考虑出勤率,分子一定要小于分母,则考察出勤人的条件有两个: a、已报名(通过behavior表查出) b、在线时长大于10分钟,我这里并没有考虑分段合计大于10分钟,而是简单的考察那些是否存在一段大于10分钟的观看时间
select a.course_id,c.course_name,round(a.num1/b.num2*100,2) as attend_rate
from
(SELECT a.course_id,
count(distinct case when TIMESTAMPDIFF(MINUTE,in_datetime,out_datetime)>=10 and if_sign=1 then a.user_id else null end) as num1
from attend_tb as a
left join behavior_tb as b
on a.user_id=b.user_id and a.course_id=b.course_id
group by a.course_id
) as a
left join
(
select course_id,count(distinct case when if_sign=1 then user_id else null end) as num2
from behavior_tb
group by course_id
) as b
on a.course_id=b.course_id
left JOIN course_tb as c
on a.course_id =c.course_id
order by a.course_id