校招算法笔面试 | SQL笔试面试编程题-统计每个用户的平均刷题数

题目## 题目

题目链接

这道题目要求我们计算山东大学用户在不同难度下的平均答题量。我们需要从三个表中提取数据:user_profilequestion_practice_detailquestion_detail

解题步骤:

  1. 连接表:我们需要将 user_profile 表与 question_practice_detail 表通过 device_id 进行连接,然后再与 question_detail 表通过 question_id 进行连接,以获取每个用户的答题难度信息。

  2. 过滤数据:只选择 university 为 “山东大学” 的用户。

  3. 分组计算:根据 difficult_level 进行分组,计算每个难度级别的平均答题量。

  4. 计算平均值:对于每个分组,计算该组内用户的答题总数,并除以用户数量,得到平均答题量。

  5. 格式化输出:将结果保留四位小数。

以下是实现上述逻辑的 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_iduniversity
    • question_practice_detail 表包含用户的题目回答记录,包括 device_idquestion_id
  • 目标

    • 计算每个学校的用户平均答题数量。
    • 按照 university 升序排序结果。

解题思路

  1. 连接表:通过 device_id 连接 user_profilequestion_practice_detail 表。
  2. 计算答题总次数:统计每个学校的用户在 question_practice_detail 表中的答题总次数。
  3. 计算答过题的用户个数:统计每个学校中在 question_practice_detail 表中出现过的不同用户个数。
  4. 计算平均答题数量:将答题总次数除以答过题的用户个数。
  5. 排序和格式化:按照 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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值