2012-01-18 99 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