题解 | #牛客直播各科目出勤率#
牛客直播各科目出勤率
http://www.nowcoder.com/practice/0cab547df4f0430b93042128f445d899
我无了
明明很简单的问题
我却一直报错。
我的问题主要在于联结的时候出现了问题。 我一开始是这样联结的
FROM attend_tb a
left join behavior_tb b
on a.user_id=b.user_id and a.course_id=b.course_id
left join course_tb c
on a.course_id=c.course_id
把主表搞错了。
实际上应该把behavior_tb作为主表联结另外两个表。
如下:
FROM behavior_tb b
left join attend_tb a
on a.user_id=b.user_id and a.course_id=b.course_id
left join course_tb c
on b.course_id=c.course_id
最后完整代码如下:
SELECT course_id,course_name
,round(count(distinct CASE WHEN diff>=10 THEN a.user_id end)/count(distinct case when if_sign=1 then a.user_id end)*100,2) attend_rate
-- ,count(distinct CASE WHEN diff>=10 THEN user_id else null end)
-- ,count(distinct case when if_sign=1 then user_id else null end)
FROM(
SELECT b.user_id,b.if_sign,b.course_id,c.course_name,TIMESTAMPDIFF(minute,a.in_datetime,a.out_datetime) diff
FROM behavior_tb b
left join attend_tb a
on a.user_id=b.user_id and a.course_id=b.course_id
left join course_tb c
on b.course_id=c.course_id
)a
GROUP BY course_id,course_name
ORDER BY course_id