我有一张像这样的表X,
student ans_status question_id
1 1 10
2 -1 10
3 1 10
4 0 10
1 -1 11
2 1 11
3 -1 11
4 -2 11
预期o / p
10 2/3
11 1/3
等。 现在,我想要每个问题10的数据,如, 数量为1 /(每个问题的总数为1&1;和-1' s) 我试过这个,
select (select count(student_id) from X
where question_id=10 and ans_status=1) / count(student_id)
from X
where question_id=10
group by ans_status
having ans_status in(1,-1).
我可以在嵌套查询中执行此操作,再次根据状态条件进行选择和分组,但有没有更好的方法呢? 请注意我想要表格中的所有问题
答案 0 :(得分:1)
你可以这样做:
select question_id,
avg(ans_status = 1)
from X
where ans_status in (1, -1)
group by question_id;
这使用MySQL功能,即布尔表达式在数字上下文中被视为整数。 "真"是1
和" false"是0
,所以平均值是真实的百分比。
如果您想独立使用这些值:
select question_id,
sum(ans_status = 1), count(*)
from X
where ans_status in (1, -1)
group by question_id;
答案 1 :(得分:0)
使用GROUP BY
计算每个question_id
的计数,以使answer_id
的计数为1或-1。
<强>查询强>
select t.`question_id`,
t.`count_1` / t.`total_count` as `new_col` from(
select `question_id`,
sum(case `ans_status` when 1 then 1 when -1 then 1 else 0 end) as `count_1`,
count(*) as `total_count`
from `your_table_name`
group by `question_id`
)t;
<强> Find a demo here 强>