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

解题思路

解读信息点

题目:运营想要计算一些参加了答题的不同学校、不同难度的用户平均答题量,请你写SQL取出相应数据

  • 1.解析该描述和这三张表,由于学校在user_profile,答题数量在question_detail,难度在question_detail,所以我们需要先进行三张表的关联,一开始的SQL我们可以先这么写
    SELECT
      up.university,
      qd.difficult_level
    FROM
      user_profile up
      LEFT JOIN question_practice_detail qpd ON up.device_id  = qpd.device_id
      LEFT JOIN question_detail qd ON qpd.question_id = qd.question_id
    
  • 2.不同学校、不同难度:这个就需要我们对学校和难度进行分组,我们可以进一步完善SQL
    -- GROUP BY up.university,  qd.difficult_level
    
    SELECT
      up.university,
      qd.difficult_level
    FROM
      user_profile up
      LEFT JOIN question_practice_detail qpd ON up.device_id  = qpd.device_id
      LEFT JOIN question_detail qd ON qpd.question_id = qd.question_id
    GROUP BY
      up.university, 
      qd.difficult_level
    
  • 3.平均刷题数(结果在小数点位数保留4位,4位之后四舍五入):我们可以使用答题记录除以机器数量(机器可能多个人使用,所以我们需要去重)就能够得到我们的平均刷题数目,即:
    ROUND(COUNT(qpd.question_id) / COUNT(DISTINCT(up.device_id)), 4) avg_answer_cnt
    
    
  • 4.所以我们最后完整的SQL语句如下
    • 由于我们全程都是左连接的,可能会存在某些学校对某种难度的题目不参与答题的情况,所以我们需要对难度为空的记录进行去除
    SELECT
      up.university,
      qd.difficult_level,
      ROUND(COUNT(qpd.question_id) / COUNT(DISTINCT(up.device_id)), 4) avg_answer_cnt
    FROM
      user_profile up
      LEFT JOIN question_practice_detail qpd ON up.device_id  = qpd.device_id
      LEFT JOIN question_detail qd ON qpd.question_id = qd.question_id
    GROUP BY
      up.university, 
      qd.difficult_level
    HAVING
      qd.difficult_level IS NOT NULL
    
全部评论

相关推荐

从明天开始狠狠卷JV...:叽里咕噜一大堆,不就是字典序,sort一下就搞定了。
投递京东等公司10个岗位
点赞 评论 收藏
分享
评论
2
5
分享

创作者周榜

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