从两张桌子上得出一个测验分数

时间:2013-02-26 11:40:46

标签: mysql

我有2个表格,一个用于测验问题,另一个用于测验问题的答案表。

第一个表的结构如下

questionID attribute value
1          title     some textQ1
1          option1   some text
1          option2   some text
1          option3   some text
1          correct   2
2          title     some textQ2
2          option1   some text
2          option2   some text
2          option3   some text
2          correct   1,2

第二个表有来自用户的回复

userID   questionID   value
user1    1            3
user2    1            2
user3    1            2
user3    2            1
user3    2            2
user2    2            3

然后我希望能够获得每个用户的分数,例如每个正确答案1分。

所以数据集看起来像

user    score
user3   3
user2   1
user1   0

这可以在1个查询中执行,然后允许多个问题条目以及多个用户吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

你正在寻找这个吗?

SQL DEMO

select r.userid, 
sum(case when find_in_set(r.value, q.value) then 1
     else 0
     end) as score   
from responses r
left join questions q
on r.questionid = q.questionid
where q.attribute = 'correct'
group by r.userid
order by score desc
;

| USERID | SCORE |
------------------
|  user3 |     3 |
|  user2 |     1 |
|  user1 |     0 |