SQL29 验证刷题效果,输出题目真实通过率
SQL29 验证刷题效果,输出题目真实通过率
selectuser_id,count(distinct if (result_info = 1, question_id, null)) / count(distinct question_id) as question_pass_rate,sum(result_info) / count(result_info) as pass_rate,count(question_id) / count(distinct question_id) as question_per_cnt
fromdone_questions_record
group byuser_id
havingquestion_pass_rate > 0.60
SQL查询解析
这个SQL查询基于用户的刷题记录计算了三个关键指标,并筛选出题目通过率高于60%的用户。
计算的指标
-
题目通过率(question_pass_rate):
- 定义:用户至少通过一次的题目占其尝试过的所有题目的比例
- 计算方式:
COUNT(DISTINCT IF(result_info = 1, question_id, NULL)) / COUNT(DISTINCT question_id)
- 示例:用户101尝试了3道不同的题目(1,2,5),且都至少通过了一次 → 3/3 = 1.0000
-
提交正确率(pass_rate):
- 定义:用户所有提交记录中通过的比例
- 计算方式:
SUM(result_info) / COUNT(result_info)
- 示例:用户101共提交4次,其中3次通过 → 3/4 = 0.7500
-
每题目平均提交次数(question_per_cnt):
- 定义:用户平均每道题目提交了多少次
- 计算方式:
COUNT(question_id) / COUNT(DISTINCT question_id)
- 示例:用户101尝试3道题共提交4次 → 4/3 ≈ 1.3333
筛选条件
查询最后使用HAVING
子句筛选出题目通过率大于60%的用户,即question_pass_rate > 0.60
。
输出结果说明
查询返回的结果包含4列:
user_id
- 用户IDquestion_pass_rate
- 题目通过率(格式化为4位小数)pass_rate
- 提交正确率(格式化为4位小数)question_per_cnt
- 每题目平均提交次数(格式化为4位小数)
示例数据验证
以用户102为例:
- 尝试题目:1,2,5(共3道)
- 提交记录:每题各提交1次且全部通过
- 计算结果:
- 题目通过率:3/3 = 1.0000
- 提交正确率:3/3 = 1.0000
- 每题目平均提交次数:3/3 = 1.0000