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

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

https://www.nowcoder.com/practice/5400df085a034f88b2e17941ab338ee8?tpId=199&tqId=1975675&ru=/activity/oj&qru=/ta/sql-quick-study/question-ranking

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

查询条件: 无。

查询范围: 涉及三张表user_profile(up)、question_practice_detail(qpd)、question_detail(qd)。使用表连接,up和qpd使用device_id连接,qd和qpd使用question_id连接。由于是统计各个学校各难度的用户平均刷题数,故up表和qpd使用inner join就可,而可能某些question_id在qd表中没有记录,故使用left join。

查询结果: 学校:up.university。问题难度:qd.difficult_level。用户平均刷题数:使用count(qpd.question_id)/count(distinct up.device_id)计算,由于每个设备可以答多道题目,故计算用户人数的使用要去重。

每个学校各难度: 使用group by up.university,qd.difficult_level

select up.university,qd.difficult_level,count(qpd.question_id)/count(distinct qpd.device_id)
from question_practice_detail as qpd
inner join user_profile as up
on up.device_id = qpd.device_id
left join question_detail as qd
on qpd.question_id = qd.question_id
group by up.university,qd.difficult_level

之前自己一直没有太搞懂题目中count计算和group by的先后关系。原来是先将连接好的三张表的数据先按照up.university分组,再按照qd.difficult_level分组,分组好了(类似于下面的结构)再进行计算。

北京大学 hard 其他字段
medium 其他字段
easy 其他字段
全部评论
同学,我不是很理解这一题的left_join与inner_join的区别,可以更加详细说明一下,使用两者的区别吗?初学者可能理解起来比较难
点赞 回复 分享
发布于 2022-04-24 13:27

相关推荐

不愿透露姓名的神秘牛友
07-09 11:15
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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