SQL29 验证刷题效果,输出题目真实通过率

SQL29 验证刷题效果,输出题目真实通过率

select
    user_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
from
    done_questions_record
group by
    user_id
having
    question_pass_rate > 0.60

SQL查询解析

这个SQL查询基于用户的刷题记录计算了三个关键指标,并筛选出题目通过率高于60%的用户。

计算的指标

  1. 题目通过率(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
  2. 提交正确率(pass_rate)

    • 定义:用户所有提交记录通过的比例
    • 计算方式:SUM(result_info) / COUNT(result_info)
    • 示例:用户101共提交4次,其中3次通过 → 3/4 = 0.7500
  3. 每题目平均提交次数(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列:

  1. user_id - 用户ID
  2. question_pass_rate - 题目通过率(格式化为4位小数)
  3. pass_rate - 提交正确率(格式化为4位小数)
  4. question_per_cnt - 每题目平均提交次数(格式化为4位小数)

示例数据验证

以用户102为例:

  • 尝试题目:1,2,5(共3道)
  • 提交记录:每题各提交1次且全部通过
  • 计算结果:
    • 题目通过率:3/3 = 1.0000
    • 提交正确率:3/3 = 1.0000
    • 每题目平均提交次数:3/3 = 1.0000

你可能感兴趣的:(SQL29 验证刷题效果,输出题目真实通过率)