统计复旦用户8月练题情况 关于复旦为什么不放ON里

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

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

# 外连接
select up.device_id, up.university, 
COALESCE(COUNT(qpd.question_id), 0) AS question_cnt,
COALESCE(SUM(CASE WHEN qpd.result = 'right' THEN 1 ELSE 0 END), 0) AS right_question_cnt
# COALESCE(COUNT(IF(qpd.result = 'right',1,NULL)),0) AS right_question_cnt  写法2
FROM user_profile AS up
LEFT JOIN question_practice_detail AS qpd 
ON up.device_id = qpd.device_id AND month(qpd.date) = 8  #8月的
WHERE up.university = '复旦大学' #复旦大学
GROUP BY device_id  #id进行分组

这是外连接,外连接会返回左表所有的行,即使在右表找不到记录。如果把复旦大学 ON里面,起不到过滤作用,返回的结果还是包括其他所有的大学,这个条件实际上是应用在连接两个表的过程中,而不是用于过滤左表的结果。

COALESCE是一个SQL函数,用于返回参数列表中的第一个非NULL值。它接受多个参数,从左到右逐个检查,返回第一个非NULL的值。

语法如下:

COALESCE(value1, value2, ..., valuen)
  • value1, value2, ..., valuen:要检查的多个值。

COALESCE函数将返回第一个非NULL的值。如果所有值都是NULL,那么COALESCE将返回NULL。

例如,假设有一个表user_profile,其中包含age列:

SELECT COALESCE(age, 0) AS adjusted_age
FROM user_profile;

在这个例子中,如果age列的值为NULL,COALESCE将返回0,否则返回age的实际值。这样可以在需要处理NULL值的情况下提供默认值。

COALESCE(SUM(CASE WHEN qpd.result = 'right' THEN 1 ELSE 0 END), 0) AS right_question_cnt

SUM((CASE WHEN qpd.result = 'right' THEN 1 ELSE 0 END)

对回答正确的次数进行统计,当条件为真时,CASE表达式返回1,否则返回0。SUM函数将所有这些1和0加总,从而得到满足条件的行数。

用if,count也同理,条件为真,返回1,否则返回NULL ,count只统计不为NULL 的行数

COALESCE(COUNT(IF(qpd.result = 'right',1,NULL)),0) AS right_question_cnt

全部评论

相关推荐

07-17 12:09
门头沟学院 Java
讲的口干舌燥,头都晕了怎么要讲这么长啊
码农索隆:没事,你口干舌燥,他不一定会看,
投递小鹏汽车等公司7个岗位
点赞 评论 收藏
分享
LazyBreeze:项目尽量体现你对技术的理解和深度,不是说把中间件用一下就完事了,你项目里面提到集群和分布式,你真在服务器上部署过吗,感觉太假了,第二个项目说自己用了微服务的什么组件,只是用了没有自己的思考,很难让面试官注意到你的简历。针对某几个技术点自己多思考一下,考虑一下有没有别的替代方案,可以写一下,即使没有真的实现
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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