SQL编程----统计每个学校的答过题的用户的平均答题数

描述

运营想要了解每个学校答过题的用户平均答题数量情况,请你取出数据。

用户信息表 user_profile,其中device_id指终端编号(认为每个用户有唯一的一个终端),gender指性别,age指年龄,university指用户所在的学校,gpa是该用户平均学分绩点,active_days_within_30是30天内的活跃天数。

device_idgenderageuniversitygpaactive_days_within_30
2138male21北京大学3.47
3214maleNULL复旦大学415
6543female20北京大学3.212
2315female23浙江大学3.65
5432male25山东大学3.820
2131male28山东大学3.315
4321male28复旦大学3.69

第一行表示:用户的常用信息为使用的设备id为2138,性别为男,年龄21岁,北京大学,gpa为3.4,在过去的30天里面活跃了7天

最后一行表示:用户的常用信息为使用的设备id为4321,性别为男,年龄28岁,复旦大学,gpa为3.6,在过去的30天里面活跃了9天

答题情况明细表 question_practice_detail,其中question_id是题目编号,result是答题结果。

device_idquestion_idresult
2138111wrong
3214112wrong
3214113wrong
6543111right
2315115right
2315116right
2315117wrong
5432118wrong
5432112wrong
2131114right
5432113wrong

第一行表示用户的常用信息为使用的设备id为2138,在question_id为111的题目上,回答错误

....

最后一行表示用户的常用信息为使用的设备id为5432,在question_id为113的题目上,回答错误

请你写SQL查找每个学校用户的平均答题数目(说明:某学校用户平均答题数量计算方式为该学校用户答题总次数除以答过题的不同用户个数)根据示例,你的查询应返回以下结果(结果保留4位小数),注意:结果按照university升序排序!!!

universityavg_answer_cnt
北京大学1.0000
复旦大学2.0000
山东大学2.0000
浙江大学3.0000

具体代码实现:

SELECT ue.university,ROUND(COUNT(ql.question_id)/COUNT(DISTINCT(ql.device_id)),4) AS avg_answer_cnt
FROM question_practice_detail AS ql JOIN user_profile AS ue
ON ql.device_id=ue.device_id
GROUP BY ue.university;

 解题思路:

1.每个学校用户的平均答题数目:

例如第一行中:北京大学总共有2个用户,2138和6543,2个用户在question_practice_detail里面答了2题,平均答题数目为2/2=1.0000;

使用COUNT()函数;注意device_id需要去重求和,不然平均数永远是1。例如:id是123的做了两道题,如果不去重求和,那么id总数是2(两次123),做题总数也是2,平均值2/2=1。

2.结果保留4位小数:

使用ROUND()函数,4表示保留四位小数;

3.结果按照university升序排序:

使用GROUP BY ue.university 实现;

4.关联两张表:

JOIN ON 用于将两个或多个表中的数据关联起来,它的具体用法如下:

在数据库中,JOIN ON用于将两个或多个表中的数据关联起来。常见的JOIN操作有以下几种用法:

  • INNER JOIN(内连接):返回两个表中匹配的行。语法如下:SELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.列 = 表2.列;
  • LEFT JOIN(左连接):返回左表中所有的行以及与右表中匹配的行。如果右表中没有匹配的行,则返回NULL。语法如下:SELECT 列名 FROM 表1 LEFT JOIN 表2 ON 表1.列 = 表2.列;
  • RIGHT JOIN(右连接):返回右表中所有的行以及与左表中匹配的行。如果左表中没有匹配的行,则返回NULL。语法如下:SELECT 列名 FROM 表1 RIGHT JOIN 表2 ON 表1.列 = 表2.列;
  • FULL JOIN(全连接):返回左表和右表中所有的行,如果没有匹配的行,则返回NULL。语法如下:SELECT 列名 FROM 表1 FULL JOIN 表2 ON 表1.列 = 表2.列;
  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值