题解 | #统计复旦用户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; 

全部评论

相关推荐

Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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