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

牛客直播各科目出勤率

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

全部评论

相关推荐

点赞 评论 收藏
分享
代码飞升:别用口语,后端就写后端,前端就写前端,最后别光后悔
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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