2012-01-18 107 views
4

我有一个包含8个问题的测验的用户答案数据库。 Q1 - Q8全部都是他们自己的专栏,我想比较所有行,并为每个回答相同问题的人回答至少5个问题。mySQL查询比较行和列

enter image description here

所以在这里,行5和6将作为2基本上我试图让一些大家谁回答至少5题相同的计数。这是可能的与MySQL查询?

编辑:

enter image description here

在这里,用户输入d乙d A B C d B,用2个同样回答测验匹配。这里的查询将返回2.

+0

5个问题同样相对于什么样的基准?这是以每个用户为基础进行汇总的吗? – Kenaniah 2012-01-18 23:54:19

+0

是的这是每个用户的基础上,我假设基准将意味着用户的答案是什么。所以如果我回答了B A A A A A C A,这将返回2,因为数据库中已经有两行,5个答案类似。 – karatechops 2012-01-19 00:26:04

+0

我不知道你想要得到什么结果,因为你的解释都是一样的,与你的数据没有任何关系。你能否编辑你的问题,并演示你如何计算你在上次评论中描述的结果?我没有看到任何方式'3'会是结果。 – 2012-01-19 00:28:32

回答

2

如果我们的测试只用你的DBDABCDB单线我们可以使用下面的例子:

SELECT * FROM `answers` WHERE ((CASE WHEN q1 = 'D' THEN 1 ELSE 0 END) +  
(CASE WHEN q2 = 'B' THEN 1 ELSE 0 END) +  
(CASE WHEN q3 = 'D' THEN 1 ELSE 0 END) +   
(CASE WHEN q4 = 'A' THEN 1 ELSE 0 END) +  
(CASE WHEN q5 = 'B' THEN 1 ELSE 0 END) +  
(CASE WHEN q6 = 'C' THEN 1 ELSE 0 END) +  
(CASE WHEN q7 = 'D' THEN 1 ELSE 0 END) +   
(CASE WHEN q8 = 'B' THEN 1 ELSE 0 END)) >= 5;   

但是,如果我们想进一步测试每个答案与表中的其他答案,我们可以使用以下语句:

SELECT *, (SELECT COUNT(answer_sub.idanswers) FROM `answers` answer_sub  
WHERE ((CASE WHEN answer_sub.q1 = a.q1 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q2 = a.q2 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q3 = a.q3 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q4 = a.q4 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q5 = a.q5 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q6 = a.q6 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q7 = a.q7 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q8 = a.q8 THEN 1 ELSE 0 END)) >= 5  
AND answer_sub.idanswers <> a.idanswers) as matching  
FROM `answers` a  
WHERE (SELECT COUNT(answer_sub.idanswers) FROM `answers` answer_sub  
WHERE ((CASE WHEN answer_sub.q1 = a.q1 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q2 = a.q2 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q3 = a.q3 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q4 = a.q4 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q5 = a.q5 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q6 = a.q6 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q7 = a.q7 THEN 1 ELSE 0 END) +  
(CASE WHEN answer_sub.q8 = a.q8 THEN 1 ELSE 0 END)) >= 5  
AND answer_sub.idanswers <> a.idanswers) > 0  
+0

这正是我所期待的 - 非常感谢。 – karatechops 2012-01-19 02:28:10