2008-08-22 56 views
0

假設我有一個Student表,它有一個int ID。我有一組固定的10個選擇題和5個可能的答案。我有一個標準化的答案表,其中有問題ID,Student.answer(1-5)和Student.IDSQL查詢幫助 - 得分多項選擇測試

我正在嘗試編寫一個查詢,它將返回某個特定百分比的所有分數。爲此我寫了一個簡單的UDF,它接受Student.answers和正確的答案,所以它有20個參數。

我開始懷疑是否將反應表非規範化,將其帶入我的應用程序並讓我的應用程序進行評分更好。

任何人都會解決這樣的事情,並有洞察力?

回答

2

如果我理解你的架構和正確的問題,如何對這樣的事情:

select student_name, score 
from students 
    join (select student_answers.student_id, count(*) as score 
     from student_answers, answer_key 
     group by student_id 
     where student_answers.question_id = answer_key.question_id 
      and student_answers.answer = answer_key.answer) 
    as student_scores on students.student_id = student_scores.student_id 
where score >= 7 
order by score, student_name 

這應該選擇學生得分爲7個或更多,例如。只需爲您的目的調整where子句。

0

從長遠來看,您所談論的體系結構可能會變得非常繁瑣,如果您需要更改問題,則意味着您正在使用的UDF的更多更改。

我認爲你可以在代碼中進行分析,而不必對你的數據庫進行反規範化處理。去標準化也可能導致靈活性不足,或者至少增加花費來更新。

0

沒辦法,你一定要保持規範。這甚至不是一個查詢。

基本上,你想留下加入學生正確的答案與該問題的全部答案,並做一個計數。這會給你正確的百分比。對每個學生都這樣做,並將最小百分比正確地放在where子句中。

1

非規範化通常被認爲是最後的手段。這個問題看起來非常類似於調查應用程序,這很常見。沒有看到你的數據模型,很難提出解決方案,但我會說這絕對有可能。我想知道爲什麼你需要20個參數到那個函數?

在大多數情況下,基於關係集的解決方案將更簡單快捷。

0

這個查詢應該很容易......假設您在問題表中存儲了正確答案。你確實有問題表中存儲的正確答案,對吧?