SQL查询大全 - 牛客SQL在线编程(3)混合查询实战
本节牛客练习地址:
牛客基础SQL练习🔗
(往期可查看专栏)
内、外(左右)连接查询概念教学:
b站学习视频跳转🔗
-
SQL22 统计每个学校的用户平均答题数
题目:求每个学校的用户平均答题数量
分析:
“每个学校” - 按学校分组
“平均答题数量” - 做题记录的总数 / 答过题的总人数,其中做题记录数不去重,一个题可以被重复做,总人数要去重,做题多次但只有一个用户;
示例部分表数据: user_profile表
示例部分表数据:question_practice_detail表
解题:
首先辨识到需要根据大学分表,分表后做什么呢?统计每个大学表中学生的个数,和完成题目次数(注意不是个数),假设有一个学校,只有1个同学,他把两道题一共完成了3次,那么结果应该是:3次/1个同学=3
综上,学生数需要去重,题目次数不需要去重,题目个数不纳入考虑。先查看一下user_profile ut左连接question_practice_detail之后,需要做计算的原始值列
做题记录的总数COUNT(qt.question_id) 和 答过题的总人数count(distinct(qt.device_id))
SELECT *,COUNT(qt.question_id),count(distinct(qt.device_id)),(COUNT(qt.question_id)/count(distinct(qt.device_id))) as avg_answer_cnt
FROM user_profile ut
JOIN question_practice_detail qt
ON ut.device_id=qt.device_id
GROUP BY university
结果:
即,北京大学的学生,做题次数为2,做题人数为2,复旦大学的学生做题次数为2,人数只有1(以此类推)
最后修改符号*,对结果集做筛选,只要学校和计算结果:
SELECT university,(COUNT(qt.question_id)/count(distinct(qt.device_id))) as avg_answer_cnt
FROM user_profile ut
JOIN question_practice_detail qt
ON ut.device_id=qt.device_id
GROUP BY universit
结果:
继续做题 继续更新