2008-08-22 106 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

这个查询应该很容易......假设您在问题表中存储了正确答案。你确实有问题表中存储的正确答案,对吧?