mysql - 评分作业 [Zaption] 数据库

标签 mysql database relationship querying libreoffice-base

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

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

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

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

  2. 我需要以某种方式实现“学生 ID”。在 Zaption 上,学生在他们选择使用的任何“ZaptionName”下进行提交。然后,我手动将 ZaptionName 与显示的第二个表中的 RosterFullName 匹配。

  3. Zaption 允许同一“学生”针对同一作业多次提交。由于允许多次提交,我运行 FilterLowMultiples 查询来为该学生选择该作业的最高成绩。

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”表中的潜在 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')

关于mysql - 评分作业 [Zaption] 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36638017/

相关文章:

javascript - 用 10 个随机字符生成 3 个字符

sql - 将三个表连接在一起得到一个值

mysql - 加快数据插入速度

python - 使用 Shell 脚本在 mySQL Workbench 模型中添加列

php - 将 mysql blob 字段从一个数据库复制到另一个数据库

SQL选择用字符串替换整数

database - 日期大于 Rails 4 和 Postgres 的地方

MySQL 查询和连接

ios - 删除核心数据对象和逆关系

php - CakePHP 3 - 通过其他表连接?