评分作业 [Zaption] 数据库

Graded Assignment [Zaption] Database

最具体地说,我无法从 LibreOffice Base [HSQLdb] 返回按 (1) class、(2) 作业、(3) 学生姓氏组织的成绩列表。

我想要这个输出,所以我可以 运行 一个脚本来将成绩从数据库复制到在线成绩簿(没有 API [sadface])

我怀疑这个问题有几个可能的原因:

  1. My relational structure 可能需要调整。

  2. 我不知何故需要在 Zaption 上实现一个 "student ID.",学生们在他们选择使用的 "ZaptionName" 下提交他们的作品。然后,我在显示的第二个 table 中手动将 ZaptionName 匹配到 RosterFullName。

  3. Zaption 允许同一个 "student" 多次提交同一个作业。因为允许多次提交,所以我 运行 FilterLowMultiples 查询 select 该学生作业的最高成绩。

FilterLowMultiples:

SELECT MAX( "Grade" ) "Grade", "RosterFullName",
"Assignment", MAX( "ZaptionName" ) "ZapName"
FROM "SelectAssignment"
GROUP BY "RosterFullName", "Assignment"

SelectAssignment 如下供参考:

SELECT "GradedAssignments"."Assignment", "Roster"."RosterFullName",
"GradedAssignments"."Grade", "ZaptionNames"."ZaptionName"
FROM "Roster", "ClassIndex", "GradedAssignments", "ZaptionNames"
WHERE "Roster"."Class" = "ClassIndex"."Class"
AND "GradedAssignments"."ZaptionName" = "ZaptionNames"."ZaptionName"
AND "ZaptionNames"."RosterFullName" = "Roster"."RosterFullName"
AND ( "GradedAssignments"."Assignment" = 'YouKnowWhatever')

我对 PullAssignmentGrades 的查询如下,但按作业排序失败,因为默认情况下没有作业,除非该学生提交作业,所以该行为空,该学生落在排序的底部,即对转移到在线的脚本不利 运行.

SELECT "Roster"."RosterFirstName", "ClassIndex"."Class",
"Roster"."RosterFullName", "ClassIndex"."ClassLevel",
"FilterLowMultiples"."Grade", "FilterLowMultiples"."ZapName",
"FilterLowMultiples"."Assignment", "FilterLowMultiples"."Grade",
"FilterLowMultiples"."Assignment", "ClassIndex"."ClassDisplayOrder",
"Roster"."RosterLastName"
FROM "ClassIndex", "FilterLowMultiples", "Roster"
ORDER BY "Roster"."RosterFirstName" ASC,
"FilterLowMultiples"."Grade" DESC,
"FilterLowMultiples"."Assignment" ASC,
"ClassIndex"."ClassDisplayOrder" ASC,
"Roster"."RosterLastName" ASC

在查询 SelectAssignment 时使用 LEFT JOIN,这样您就不会放弃没有完成特定作业的学生。您可以选择对来自 "GradedAssignments" table 的潜在 NULL 值使用 COALESCE 来分配 0 或 I 的等级。像这样:

SELECT 'YouKnowWhatever' AS "Assignment", "Roster"."RosterFullName",
  COALESCE("GradedAssignments"."Grade",0), "ZaptionNames"."ZaptionName"
FROM "Roster"
  INNER JOIN "ClassIndex" ON "Roster"."Class" = "ClassIndex"."Class"
  INNER JOIN "ZaptionNames" ON "ZaptionNames"."RosterFullName" = "Roster"."RosterFullName"
  LEFT JOIN "GradedAssignments" ON ("GradedAssignments"."ZaptionName" = "ZaptionNames"."ZaptionName" 
    AND "GradedAssignments"."Assignment" = 'YouKnowWhatever')