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

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

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

一步步来,先模拟指定查询山东大学的

SELECT
	*
FROM
	question_practice_detail q
INNER JOIN
	user_profile u 
ON
	u.device_id = q.device_id
LEFT JOIN
	question_detail d
ON
	q.question_id = d.question_id
WHERE
	u.university = '山东大学'

结果如下:

题目要求 “不同学校、不同难度的用户平均答题数”。

从上图可以看到,如果想求山大的不同难度平均答题数,先要求出“参与答题的用户数量”,即:

count(distinct q.device_id)
因为id可能重复 所以要去重。

再求出各个难度的答题总数,相除即可,各难度分别的答题总数:

count(q.question_id)
同时通过 group by 对"难度"分组:
GROUP BY
	u.university,d.difficult_level
这样就实现了 查询到不同难度分组下的答题数

最后合并起来:

-- 不同学校、不同难度的用户平均答题量
SELECT
	u.university,
	d.difficult_level,
	round(count(q.question_id) / count(distinct q.device_id), 4) as avg_answer_cnt
FROM
	question_practice_detail q
INNER JOIN
	user_profile u 
ON
	u.device_id = q.device_id
LEFT JOIN
	question_detail d
ON
	q.question_id = d.question_id
GROUP BY
	u.university,d.difficult_level;

我的思考:看到要分组,“不同学校 不同难度”,就想到了GROUP BY ,其实可以先指定其中 具体的 一个分组 写出这个分组怎么查出结果,可以把GROUP BY里的分组条件 转换成WHERE语句的判断条件。比如指定一个分组山东大学 简单难度 ,WHERE university='山东大学' and difficult_level='easy';,从局部到整体。

全部评论

相关推荐

点赞 评论 收藏
分享
04-09 09:47
门头沟学院 Java
Arbelite_:2-3k,这工资还不如去摇奶茶
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务