【问题标题】:Calculate sum of one row and divide by sum of another row. Oracle view/query计算一行的总和并除以另一行的总和。 Oracle 视图/查询
【发布时间】:2011-08-16 05:03:06
【问题描述】:

这是我在这里的第一个问题,请耐心等待。我的 Oracle 数据库中有两个表,如下所示:

modules 带字段:

  • module_code 例如。 INF211
  • module_title 例如。信息技术
  • credits eg.20

module_progress 带字段:

  • student_id 例如。 STU1
  • module_code 例如。 INF211
  • module_year 例如。 1
  • module_percent 例如。 65

每位学生每年学习 5 个模块。

所以如果可能的话,这就是我想把这一切都放在一个查询/视图中:

  1. 查找特定学生的模块百分比总和
  2. 求每个模块所有学分的总和,就其模块百分比而言。
  3. 将模块百分比总和除以学分总和,然后乘以 100 得出平均成绩。

这个可以吗?

【问题讨论】:

  • 真的需要第一步吗?即,对于给定的学生和模块,module_progress 中是否有不止一条记录?
  • 一个学生可以拥有任意数量的模块,只要它们加起来不超过 120 个学分。每个模块价值 10 或 20 个学分,因此您显然最多可以拥有 12 个模块。我需要执行以下操作才能计算出平均成绩......每个模块 = (模块百分比 / 10) * 学分。得到这个结果的总和除以学分的总和,然后乘以 100。这有意义吗?我该怎么做??

标签: sql oracle database-design


【解决方案1】:
SELECT  student_id,
        SUM(credits * module_percent) / SUM(credits) * 100.0
FROM    module_progress mp
JOIN    modules m
ON      m.module_code = mp.module_code
GROUP BY
        student_id

【讨论】:

  • 既然如原帖所说,百分比存储为65,而不是0.65,我认为你应该将它们除以100。但是因为它还需要乘以结果除以 100,那么最终,我认为,您只需要删除 * 100.0
  • 这就像一个魅力,但我已经意识到一个重要的问题。让我解释一下……每个模块可以是 10 或 20 学分。每年一个学生有足够的模块来增加最多 120 个学分,所以我需要进行以下计算以获得正确的年平均成绩......我需要为每个模块执行以下操作 =(模块百分比 / 10)*学分,然后得到总和除以 120。这有意义吗?我该怎么做??
  • @JMoorhouse:您能否提供一些示例数据和所需的结果集?
  • 我现在想通了。将在周二晚上发布答案,因为那是我的截止日期过去,并且不希望人们可能复制我的解决方案并让我在大学遇到麻烦。感谢您的耐心和时间。你帮了很多忙:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多