假设我有一个Student表,它有一个int ID。 我有一组固定的10个多项选择题,有5个可能的答案。 我有一个标准化的答案表,其中包含问题ID,Student.answer(1-5)和Student.ID

我正在尝试编写一个查询,该查询将返回一定百分比的所有分数。 为此,我编写了一个简单的UDF,它接受Student.answers和正确的答案,因此它具有20个参数。

我开始怀疑对答案表进行非规范化是否更好,将其放入我的应用程序中,然后让我的应用程序进行评分。

任何人都可以解决这样的事情并拥有洞察力吗?

===============>>#1 票数: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子句。

===============>>#2 票数:1

我可能会留给您的应用程序来执行评分。 请查看Jeff Atwood的“ 也许规范化不是正常”

===============>>#3 票数:0

从长远来看,您所讨论的体系结构可能会变得非常繁琐,并且如果您需要更改问题,则意味着您正在使用的UDF会有更多更改。

我认为您可能可以在代码中进行分析,而不必对数据库进行非规范化。 非规范化还可能导致灵活性不足,或者至少增加了更新的费用。

===============>>#4 票数:0

绝对不可能,您绝对要保持其标准化。 甚至没有那么难查询。

基本上,您想让学生将正确答案与该问题的总答案结合起来,然后计算一次。 这将为您提供正确的百分比。 对每个学生进行此操作,然后在where子句中输入最小的正确百分比。

===============>>#5 票数:0

非正规化通常被认为是不得已的方法。 这个问题似乎与非常普遍的调查应用程序非常相似。 没有看到您的数据模型,很难提出解决方案,但是我会说这绝对是可能的。 我想知道为什么您需要该功能20个参数?

在大多数情况下,基于关系集的解决方案将更简单,更快。

===============>>#6 票数:0

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

  ask by Webjedi translate from so

未解决问题?本站智能推荐:

3回复

选择查询中嵌入的动态SQL

我有一个表Users , 并且许多数据库具有相同的结构(相同的表,相同的过程等),因此每个数据库都有一个名为Project的表,这就是Project表的结构, 因此,当我查询数据库时: 我得到这个结果: 现在,我想要的是将表Users结果“链接” /“加入”到该查
1回复

在PL / SQL中的选择查询中引用数组元素

我正在编写一些Pl / SQl,其中使用了长度为5的数组变量。 然后,我将另一个表的所有列名称存储到上面声明的数组中。 现在,我正在寻找一种解决方案,可以在选择查询中使用Array元素从另一个具有列名的表中获取数据。 喜欢 Pl / Sql中的查询应该是这样的(仅供参考)
1回复

Oracle动态“ SQL选择”查询记录类型

动态请求如下所示: 然后我做: 直到运行时才知道通过cur1提取的记录的确切类型,因为它不应对该过程应用于的任何表施加任何限制。 但是,然后如何遍历查询返回的内容呢?
3回复

需要动态SQL帮助

我有一个动态SQL语句,该语句会生成一系列update语句,但不会将值包含在set子句和where子句中,并将其括在单引号中。 有谁知道如何解决这个问题? 这是我的代码。 执行时输出 我试图弄清楚如何将ssn值括在单引号中,如下所示
1回复

请帮助我将SP转换为动态sql查询或使用COALESCE的SP并可以正常运行

我有一个以当前格式无法正常运行的SP,它不会返回所有行,并且当我包含一些值时也不会返回任何值。 这是SP: 我尝试使用COALESCE进行尝试,但是COALESCE似乎不适用于INT,至少在我的SP中不起作用,只要我具有COALESCE和int值,SP都不会返回任何值。 这是带有CO
1回复

如何在Mulesoft中的SQL连接器的选择查询中动态传递表名?

我的mulesoft Web API中有一个选择连接器,我想使用SQL查询来获取数据,但我需要动态传递表名。 我尝试了$(vars.table),但是它不起作用。 应该成功执行SQL查询并从数据库中获取记录。
3回复

建立一些动态查询选择并立即在Oracle PL / SQL中显示其输出

在我的实际工作中,我经常需要读取一些表并采取行动,有时需要手动更新这些数据。 因此,我构建了一个PL / SQL块,该块创建了我的SELECT语句(是的,带有“ FOR UPDATE”子句,刚刚被注释了)。 例如,这只是我构建的查询之一 : 然后,我从“输出”窗口(通过dbms_ou
3回复

SQL Server查询以选择特定类型的所有列,并显示其最大值

我正在使用SQL Server 2012。 我的查询的第一部分已经在该线程中得到解答。 但是我还希望第二列将在其对应的表中显示该列的对应最大值。 我已经尝试过这种方法:使用将表名和列名作为参数并返回最大值的函数。 但是从函数中使用动态SQL是非法的。 而且,我似乎无法从SELE
3回复

Sql Server 2005中需要的T-Sql帮助

我创建了一个存储过程,该存储过程在tbluser表中的5000个用户上运行,并且数据库中有一些过滤条件。有4个过滤条件(FC1,FC2,FC3,FC4)。过滤条件具有一些ListBox以及部门和国家/地区的下拉列表。想要输出如下: 我在结果集中得到了ID,名称,人员编号,部门,但没有积分
2回复

使用表名作为变量的SQL选择

我有几个只能使用sybase访问的表。 我需要编写一个查询,该查询将从7月提取数据到指定的日期参数(例如201507-201512)。 输入日期参数​​后,我需要访问sybase上具有以下名称的表:ff_vv_201507_tt至ff_vv_201512_tt。 我虽然可能将yyyym