题目## 题目
这道题目要求我们计算山东大学用户在不同难度下的平均答题量。我们需要从三个表中提取数据:user_profile、question_practice_detail 和 question_detail。
解题步骤:
-
连接表:我们需要将
user_profile表与question_practice_detail表通过device_id进行连接,然后再与question_detail表通过question_id进行连接,以获取每个用户的答题难度信息。 -
过滤数据:只选择
university为 “山东大学” 的用户。 -
分组计算:根据
difficult_level进行分组,计算每个难度级别的平均答题量。 -
计算平均值:对于每个分组,计算该组内用户的答题总数,并除以用户数量,得到平均答题量。
-
格式化输出:将结果保留四位小数。
以下是实现上述逻辑的 SQL 查询:
SELECT
u.university,
qd.difficult_level,
ROUND(COUNT(qpd.id) / COUNT(DISTINCT u.device_id), 4) AS avg_answer_cnt
FROM
user_profile u
JOIN
question_practice_detail qpd ON u.device_id = qpd.device_id
JOIN
question_detail qd ON qpd.question_id = qd.question_id
WHERE
u.university = '山东大学'
GROUP BY
u.university, qd.difficult_level
ORDER BY
qd.difficult_level;
题目分析
-
表结构:
user_profile表包含用户的基本信息,包括device_id和university。question_practice_detail表包含用户的题目回答记录,包括device_id和question_id。
-
目标:
- 计算每个学校的用户平均答题数量。
- 按照
university升序排序结果。
解题思路
- 连接表:通过
device_id连接user_profile和question_practice_detail表。 - 计算答题总次数:统计每个学校的用户在
question_practice_detail表中的答题总次数。 - 计算答过题的用户个数:统计每个学校中在
question_practice_detail表中出现过的不同用户个数。 - 计算平均答题数量:将答题总次数除以答过题的用户个数。
- 排序和格式化:按照
university升序排序,并保留到小数点后4位。
SQL 查询
以下是实现上述思路的 SQL 查询:
SELECT
up.university,
ROUND(COUNT(qpd.question_id) / COUNT(DISTINCT qpd.device_id), 4) AS avg_answer_cnt
FROM
user_profile up
JOIN
question_practice_detail qpd ON up.device_id = qpd.device_id
GROUP BY
up.university
ORDER BY
up.university;
461

被折叠的 条评论
为什么被折叠?



