题解 | #统计每个学校各难度的用户平均刷题数#

统计每个学校各难度的用户平均刷题数

http://www.nowcoder.com/practice/5400df085a034f88b2e17941ab338ee8

题意明确:

计算每个学校用户不同难度下的用户平均答题题目数


问题分解:

  • 限定条件:无;
  • 每个学校:按学校分组group by university
  • 不同难度:按难度分组group by difficult_level
  • 平均答题数:总答题数除以总人数count(qpd.question_id) / count(distinct qpd.device_id)
  • 来自上面信息三个表,需要联表,up与qpd用device_id连接,qd与qpd用question_id连接。

细节问题:

  • 表头重命名:as
  • 平均值精度:保留4位小数round(x, 4)

完整代码:

select 
    university,
    difficult_level,
    round(count(qpd.question_id) / count(distinct qpd.device_id), 4) as avg_answer_cnt
from question_practice_detail as qpd

left join user_profile as up
on up.device_id=qpd.device_id

left join question_detail as qd
on qd.question_id=qpd.question_id

group by university, difficult_level
全部评论
select u.university,q.difficult_level,round(count(qd.question_id) / count(distinct qd.device_id), 4)'avg_answer_cnt' from user_profile u left join question_practice_detail qd on qd.device_id = u.device_id left join question_detail q on q.question_id = qd.question_id group by u.university,q.difficult_level having avg_answer_cnt > 0
1 回复 分享
发布于 2022-02-22 09:22
请教大神为什么用的left join呢
13 回复 分享
发布于 2021-11-16 17:38
好像left join答案就错了
5 回复 分享
发布于 2021-12-30 21:36
懵逼了 left join 和 inner join的区别都懂 ,应用到这题目都对,大佬能解释解释吗
点赞 回复 分享
发布于 2022-06-22 17:02
inner不行吗
点赞 回复 分享
发布于 2022-05-25 10:58
第二个left join改为inner join 可以快很多
4 回复 分享
发布于 2021-12-18 16:37
这个网站真是错答案一大堆,我在SQL工具里用inner join都完美显示答案了,但在这里就是不通过,看了标准答案,改成left join还是不通过,复制上面的是测试通过,逐个字符对比发现问题出在difficult_level列名,原题中是diffcult_level,必须写错才能通过
3 回复 分享
发布于 2024-12-25 17:22 河南
如果qpd表记录的是所有学生答的所有题,那么用inner join,但是如果qpd不全,必须用left join,因为inner join会漏掉一部答了题但是答题明细没记录在qpd表的学生,使得count(distinct u.device_id)偏小。应该是这样的,不太确定,欢迎讨论
2 回复 分享
发布于 2023-01-08 01:38 浙江
为什么平均答题量不是用总的答题数量/人数,也就是sum(answercnt)/人数
2 回复 分享
发布于 2022-10-20 17:51 北京
select university, difficult_level, count(aa.question_id) / count(distinct aa.question_id) as avg_answer_cnt from question_practice_detail aa left join user_profile bb on bb.device_id=aa.device_id left join question_detail cc on cc.question_id=aa.question_id group by university,difficult_level 我的答案为什么是错的
1 回复 分享
发布于 2022-09-19 14:39 山东
left 是错的 会出来清华大学
1 回复 分享
发布于 2022-05-03 13:42
用question_practice_detail中的device_id和question_id来计算,是因为并不知道是否某所大学所有学生都参与了答题。假设用user表中的device_id来计算,万一有学生没参与答题,那数据就有错了
1 回复 分享
发布于 2022-03-06 10:07
这个比较快 select a.university,bc.difficult_level, count(bc.question_id)/count(distinct a.device_id) as avg_answer_cnt from user_profile a join (select b.device_id,b.question_id,c.difficult_level from question_practice_detail b join question_detail c on b.question_id=c.question_id) bc on a.device_id=bc.device_id group by a.university,bc.difficult_level;
1 回复 分享
发布于 2022-01-26 11:00
为什么语法不按on table1=table2 也行,按on table1=table2却不行?
1 回复 分享
发布于 2022-01-12 09:12
那个id 里面有重复的 我看了 ,可能是对题目的理解问题,我之前也是用的id
1 回复 分享
发布于 2021-12-14 11:25
为什么我用ID不行 去重device_id 得个数才是总人数? 那id代表的又是什么意思?
1 回复 分享
发布于 2021-12-01 16:45
你这里表格是difficult_level,题目里写的diffcult_level啊,少个i
点赞 回复 分享
发布于 04-10 22:44 河南
明白了,就是把几张表给拼在一起
点赞 回复 分享
发布于 2024-11-26 15:49 上海
不明白哪里错了;程序异常退出, 请检查代码"是否有数组越界等异常"或者"是否有语法错误" SQL_ERROR_INFO: "Unknown column 'difficult' in 'field list'" select university,difficult level,count(a.question_id)/count(distinct a.device_id) as avg_answer_cnt from question_practice_detail as a left join user_profile as b on a.device_id=b.device_id left join question_detail as c on b.question_id=c.question_id group by university,difficult_level
点赞 回复 分享
发布于 2024-07-26 18:59 湖南
都不运行一下就发出来,误导别人。这答案错的。
点赞 回复 分享
发布于 2024-05-19 10:46 广东

相关推荐

点赞 评论 收藏
分享
评论
416
66
分享

创作者周榜

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