题解 | #统计复旦用户8月练题情况#

统计复旦用户8月练题情况

https://www.nowcoder.com/practice/53235096538a456b9220fce120c062b3

【知识点】

SQL中条件放在on后与where后的区别(参考博客:链接

数据库在通过连接两张或多张表来返回记录时,都会生成一张临时表,然后再将这张临时表返回给用户。

在使用LEFT JOIN时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

可以这样理解:on是在生成连接表的起作用的,where是生成连接表之后对连接表再进行过滤。当使用left join时,无论on的条件是否满足,都会返回左表的所有记录,对于满足的条件的记录,两个表对应的记录会连接起来,对于不满足条件的记录,那右表字段全部是null.

select up.device_id,up.university,
count(question_id) as question_cnt,
sum(if(result="right",1,0)) as right_question_cnt
from
user_profile as up
left join
question_practice_detail as qpd
on up.device_id = qpd.device_id and month(qpd.date)=8
where up.university="复旦大学"
group by up.device_id; 

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
05-28 17:15
猿辅导 Java后端日常实习 800一天
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务