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:按 "题目难度等级" 对结果进行排序
相关推荐
GBASE13 小时前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)
数据库
xiezhr1 天前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
唐青枫2 天前
MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
sql·mysql
吃糖的小孩2 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
小满8782 天前
5.Mysql事务隔离级别与锁机制
mysql
笃行3503 天前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行3503 天前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行3503 天前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库
元Y亨H3 天前
技术笔记:MySQL 字符集排序规则与大小写敏感性问题解决方案
mysql