Sql 计算一行的和并除以另一行的和。Oracle视图/查询

Sql 计算一行的和并除以另一行的和。Oracle视图/查询,sql,oracle,database-design,Sql,Oracle,Database Design,这是我在这里的第一个问题,请容忍我。我的Oracle数据库中有两个表,如下所示: 模块带字段: 模块代码如INF211 模块标题如信息技术 学分eg.20 module\u progress带字段: 学生id例如STU1 模块代码如INF211 module\u year例如1 模块百分比如65 每个学生每年学习5个模块 因此,如果可能的话,这就是我想要将所有这些放在一个查询/视图中的内容: 查找特定学生的模块百分比总和 根据每个模块的模块百分比查找每个模块的所有学分之和 将模块百分比之

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

模块
带字段:

  • 模块代码
    如INF211
  • 模块标题
    如信息技术
  • 学分
    eg.20
module\u progress
带字段:

  • 学生id
    例如STU1
  • 模块代码
    如INF211
  • module\u year
    例如1
  • 模块百分比
    如65
每个学生每年学习5个模块

因此,如果可能的话,这就是我想要将所有这些放在一个查询/视图中的内容:

  • 查找特定学生的模块百分比总和
  • 根据每个模块的模块百分比查找每个模块的所有学分之和
  • 将模块百分比之和除以学分之和,再乘以100,得到平均分数

  • 可以这样做吗?

    真的需要第一步吗?ie对于一个给定的学生和模块,模块的进度是否有超过一个记录?一个学生可以有任意多个模块,只要它们加起来总共120学分。每个模块价值10或20学分,因此您最多可以拥有12个模块。我需要做以下几项来计算平均分数。每个模块=(模块百分比/10)*学分。将结果之和除以积分之和,再乘以100。这有意义吗?我该怎么做呢?因为,正如在原始帖子中所说,百分比存储为
    65
    ,而不是
    0.65
    ,我认为你应该将它们除以100。但是因为它也需要将除法的结果乘以100,所以最终,我认为,你只需要删除
    *100.0
    。这很有魅力,但我意识到了一个重要的问题。让我解释一下。。。每个模块可以是10或20学分。每年一个学生有足够的模块来加上120个学分,所以我需要做以下计算来获得正确的年平均成绩。。。我需要为每个模块做以下操作=(模块百分比/10)*学分,然后得到其总和,除以120。这有意义吗?我该怎么做呢???@JMoorhouse:你能提供一些示例数据和所需的结果集吗?我现在已经弄明白了。我会在周二晚上发布答案,因为那个是我的截止日期,我不希望人们可能复制我的解决方案,并让我在uni遇到麻烦。谢谢你的耐心和时间。你帮了很多忙:)
    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