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

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

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

解题思路

  • 一看到这种题还是比较懵的,又是要分组,又是要判断,又要连接,还要进行日期判断
  • 这时候第一步是要仔细读题,先分析可能出现的子句,和要用到的语句。
  • 题目有要求统计没有答过题的用户,所有我们要以user_profile为主表来操作
  • 对于本题来说,实现两表的连接是比较容易实现的,
  • 然后是选择要使用的字段,与本题有关的字段包括,user_profile 的device_id,university ,和 question_practice_detail 的 question_id、result 和 date
  • 先选好五个字段,然后对五个字段进行操作

分析过程

1、用where字段 操作 WHERE t1.university = '复旦大学'
2、时间方面要注意 从题意“8月没有练习过的用户”可知没有答过题的也要统计,
3、但是没有答过题的在左连接下question_id为null 所以要加上 
	OR t2.date IS NULL
4、result字段是字符型的,题目要求统计回答正确的题数,直接计数肯定不行
	所以用case 或者 if 函数转换一下,然后用求和函数统计,可以一并把null和
    wrong值转换成0值
5、接下来就是统计题目数,和对答题结果求和
6、最后根据用户分一下组

代码如下

SELECT t1.device_id, t1.university, 
count(t2.question_id) AS question_cnt, 
sum(
case
when t2.result = 'right' then 1
ELSE 0
end
) AS right_question_cnt

FROM user_profile AS t1
LEFT JOIN question_practice_detail AS t2
ON t1.device_id = t2.device_id
WHERE t1.university = '复旦大学' AND ((MONTH(t2.date)=8 OR t2.date IS NULL ))
GROUP BY device_id
;

全部评论
百分百错,我试了下,自输入加入一条4321在其它月做题(不是8月就行),where后面的month(date)=8 or date is null(你只是看到了全部月没做题,但是某一月做了题呢,date is null就把4321的数据弄没了),不符合题目如果8月不做就为0,应该在on后面限制month(date)=8
10 回复 分享
发布于 2022-02-23 13:55
GROUP BY 里没有university字段,为什么能在select查询
2 回复 分享
发布于 2022-05-03 11:36
你左联的时候不满足的右边题号已经为null了,你做count或者sum都是当00算没必要再加个isnull的判断把
2 回复 分享
发布于 2022-04-14 20:24
小白看了这么多解题,就你这个看懂了。OR t2.date IS NULL十分精妙
1 回复 分享
发布于 2024-08-02 16:03 上海
select device_id,university, count(question_id) as question_cnt, sum(distinct if(result='right',1,0)) right_question_cnt from (select university,device_id from user_profile where university='复旦大学') as a left join (select * from question_practice_detail where month(date) =8) AS b using (device_id) group by device_id, university;本地试了完全没问题,在线运行就是错的,啥情况
点赞 回复 分享
发布于 2024-04-19 17:47 福建
您好想问下 是否可以把这两个筛选条件 放在join的时候的条件呢? 求解呀大佬
点赞 回复 分享
发布于 2022-02-10 16:04

相关推荐

12-15 11:27
门头沟学院 Java
哇哇的菜鸡oc:所有人不要理会,就好了,后面他就知道怎么回事了,只能说有的时候市场都是被宰的人搞坏的
点赞 评论 收藏
分享
评论
104
10
分享

创作者周榜

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