如何按question_id分组统计correct和wrong的作答次数?
解决按问题分组统计作答对错次数的问题
别担心,我来帮你搞定这个统计需求!你的核心问题是之前的SQL只按answer分组,而我们需要按stack_id和question_id组合分组,同时分别统计每组里的对错次数。
正确的SQL查询语句
这里用条件聚合的方式来实现,非常适合这种需要按不同条件统计分组内数据的场景:
SELECT stack_id, question_id, COUNT(CASE WHEN answer = 'wrong' THEN 1 END) AS wrong, COUNT(CASE WHEN answer = 'correct' THEN 1 END) AS correct FROM answers GROUP BY stack_id, question_id ORDER BY stack_id, question_id;
语句解释:
GROUP BY stack_id, question_id:把相同stack_id和question_id的记录归为一组(因为同一个问题ID可能属于不同的stack,比如你的数据里question_id=13属于stack_id=3)COUNT(CASE WHEN ... THEN 1 END):当answer匹配指定值时返回1,否则返回NULL;COUNT函数会自动忽略NULL值,这样就精准统计了每组里对应答案的次数ORDER BY是可选的,用来让结果按stack和问题ID排序,看起来更整洁
非SQL的替代方案
如果你觉得SQL上手有点难,也可以用这些工具来处理:
1. Python Pandas
如果你的数据能导入Python,用Pandas可以快速完成统计:
import pandas as pd # 假设数据已经读取到DataFrame中(比如从CSV/数据库导入) answers_df = pd.DataFrame([ [1,34,1,45,'wrong'], [2,55,1,45,'correct'], [3,2,3,13,'wrong'], [4,99,1,46,'correct'], [5,12,3,13,'wrong'], [6,12,2,10,'correct'] ], columns=['id','user_id','stack_id','question_id','answer']) # 分组统计并整理格式 result = answers_df.groupby(['stack_id', 'question_id'])['answer'].value_counts() result = result.unstack(fill_value=0).reset_index()[['stack_id', 'question_id', 'wrong', 'correct']] print(result)
2. Excel数据透视表
如果数据在Excel里,用数据透视表几步就能搞定:
- 选中所有数据,点击「插入」→「数据透视表」
- 把
stack_id和question_id拖到「行」区域 - 把
answer拖到「列」区域 - 把
answer拖到「值」区域,设置为「计数」 - 最后调整列的顺序,就能得到和你期望一致的表格啦
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

