SQL查询大全 - 牛客SQL在线编程(3)混合查询实战

SQL查询大全 - 牛客SQL在线编程(3)混合查询实战

本节牛客练习地址:
牛客基础SQL练习🔗
(往期可查看专栏)

内、外(左右)连接查询概念教学:
b站学习视频跳转🔗

  1. 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

结果:
在这里插入图片描述

继续做题 继续更新

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值