SQL24 统计每个用户的平均刷题数

复制代码
select
        u.university,qd.difficult_level,
        round(count(qpd.question_id)/count(distinct qpd.device_id),4) 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;

SELECT 子句

复制代码
   select 
       u.university,
       qd.difficult_level,
       round(count(qpd.question_id)/count(distinct qpd.device_id),4) avg_answer_cnt
  • u.university:输出学校名称(此处固定为山东大学)
  • qd.difficult_level:输出题目难度等级
  • round(...,4):计算并四舍五入到小数点后 4 位
  • count(qpd.question_id):统计所有被回答的题目总数
  • count(distinct qpd.device_id):统计参与答题的不同设备(学生)数量
  • avg_answer_cnt:最终得到的 "平均每人答题数" 列名

FROM 与 JOIN 子句

复制代码
   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
  • 这是一个三表关联查询:
    • user_profile u:用户信息表(设备 ID、学校等)
    • question_practice_detail qpd:答题记录表(设备 ID、题目 ID 等)
    • question_detail qd:题目信息表(题目 ID、难度等级等)
  • 通过 device_id 关联用户与答题记录,通过 question_id 关联答题记录与题目详情。

WHERE 子句

复制代码
   where u.university='山东大学'
  • 筛选条件:只统计山东大学的用户数据。

GROUP BY & ORDER BY

复制代码
   group by u.university,qd.difficult_level
   order by qd.difficult_level
  • GROUP BY:按 "学校" 和 "题目难度等级" 进行分组统计
  • ORDER BY:按 "题目难度等级" 对结果进行排序
相关推荐
Leinwin2 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_417695052 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水2 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
ego.iblacat3 小时前
MySQL 服务基础
数据库·mysql
Maverick064 小时前
Oracle Redo 日志操作手册
数据库·oracle
攒了一袋星辰5 小时前
高并发强一致性顺序号生成系统 -- SequenceGenerator
java·数据库·mysql
W.D.小糊涂5 小时前
gpu服务器安装windows+ubuntu24.04双系统
c语言·开发语言·数据库
云贝教育-郑老师5 小时前
【OceanBase 的多租户架构是怎样的?有什么优势?】
数据库·oceanbase
顶点多余5 小时前
使用C/C++语言链接Mysql详解
数据库·c++·mysql
xiaokangzhe5 小时前
MySQL 数据库操作
数据库·oracle