如何通过数据库查询获取测验系统用户的平均分数?
获取不同题量的用户平均分数解决方案
没问题!既然你已经把字母等级转换成数值分数了,计算平均分就完全可行啦。下面我会结合常见的表结构场景,给出对应的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_idquiz_idquestion_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_score、score和question_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




