You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何通过数据库查询获取测验系统用户的平均分数?

获取不同题量的用户平均分数解决方案

没问题!既然你已经把字母等级转换成数值分数了,计算平均分就完全可行啦。下面我会结合常见的表结构场景,给出对应的SQL查询语句:

场景1:表中直接存储每次测验的总分和对应题量

假设你的数据表名为quiz_scores,包含以下字段:

  • user_id:用户唯一标识
  • quiz_id:测验唯一标识
  • question_count:该测验的总题量
  • total_score:用户完成该测验的总分

按题量分组,计算所有用户在对应题量测验中的整体平均分,可以用这个查询:

SELECT
  question_count,
  AVG(total_score) AS average_total_score, -- 对应题量测验的总分平均分
  AVG(total_score / question_count) AS average_per_question_score -- 对应题量测验的单题平均分
FROM quiz_scores
GROUP BY question_count
ORDER BY question_count;

如果需要按用户维度,查看每个用户在不同题量下的平均分,可以调整为:

SELECT
  user_id,
  question_count,
  AVG(total_score) AS user_average_total_score
FROM quiz_scores
GROUP BY user_id, question_count
ORDER BY user_id, question_count;

场景2:表中存储每道题的得分记录

如果你的数据是按单题存储的(比如表名为question_scores),字段包括:

  • user_id
  • quiz_id
  • question_id:题目唯一标识
  • score:单题得分
  • question_count:该测验的总题量

需要先计算每个用户每次测验的总分,再按题量求平均,用CTE(公共表表达式)会更清晰:

WITH user_quiz_totals AS (
  -- 先计算每个用户每次测验的总分
  SELECT
    user_id,
    quiz_id,
    question_count,
    SUM(score) AS total_score
  FROM question_scores
  GROUP BY user_id, quiz_id, question_count
)
-- 再按题量分组计算平均分
SELECT
  question_count,
  AVG(total_score) AS average_total_score,
  AVG(total_score / question_count) AS average_per_question_score
FROM user_quiz_totals
GROUP BY question_count
ORDER BY question_count;

补充说明

  • 确保total_scorescorequestion_count都是数值类型(比如INT、DECIMAL),这样AVG函数和除法运算才能正常执行
  • 如果题量信息存储在单独的测验表(比如quizzes)中,只需要关联该表即可获取题量:
SELECT
  q.question_count,
  AVG(qs.total_score) AS average_total_score
FROM quiz_scores qs
JOIN quizzes q ON qs.quiz_id = q.quiz_id
GROUP BY q.question_count
ORDER BY q.question_count;

如果你的实际表结构和上述假设不同,随时告诉我具体的字段和表名,我可以帮你调整查询语句~

内容的提问来源于stack exchange,提问作者Zestyy99

火山引擎 最新活动