题解 | #牛客直播各科目出勤率#

牛客直播各科目出勤率

https://www.nowcoder.com/practice/0cab547df4f0430b93042128f445d899

#需求:统计每个科目的出勤率
#输出:course_id、course_name、'attend_rate(%)'(出勤率)
#要求:attend_rate(%)保留两位小数;course_id升序输出;出勤率=在线时长>=10min的人数/报名人数
#思路:以子查询各自查到符合要求的出勤人数和报名人数,再表链接汇总计算;要的是科目的出勤率,考虑到同一人有多次出勤的可能,要对user_id做去重
select course_id,course_name,round(tt1/tt2*100,2) 'attend_rate(%)'
from(
  select course_id,count(distinct user_id) tt1
  from attend_tb
  where timestampdiff(minute,in_datetime,out_datetime)>=10
  group by course_id
) t1
join(
  select course_id,count(distinct user_id) tt2
  from behavior_tb
  where if_sign=1
  group by course_id
) t2 using(course_id)
join course_tb
using(course_id)
order by course_id
错题集:
#思路:符合要求的出勤人数单独在where里子查询;人数的出勤率需要对人数去重
select course_id,course_name,
round(count(distinct user_id)/sum(if_sign)*100,2) 'attend_rate(%)'
from behavior_tb join course_tb using(course_id)
where user_id in(
  select distinct user_id
  from attend_tb
  where timestampdiff(minute,in_datetime,out_datetime)>=10
)
group by course_id,course_name
order by course_id
#这个方式的错误在于直接使用sum(if_sign)参与运算,而实际需要的是对科目聚合后的去重报名人数,用sum直接计算没有去重的步骤,得到的人数有差异,而且where筛选user_id得到的人数也不对;

全部评论

相关推荐

xtu大迫杰:偶遇校友,祝校友offer打牌
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务