【发布时间】:2016-12-25 17:11:20
【问题描述】:
我正在研究 PEOPLESOFT CMS。学生参加课程和 获得成绩。有时学生重复一门课程并获得 更好的成绩。我需要只使用最好的来计算 GPA 年级。所以对于每个重复课程的学生,我必须确定 最高等级是什么。在第二学期,他获得了 3 个grade_point 但在 4 个学期他提高到 4.5 grad_point 然后查询应该 当我们通知所有 4 个学期的结果但获取 4.5 而不是 3 当我们通知到第二个学期时,它可能会返回 3 grad_point.here 我构造了一个在选择 bt 时工作正常的 sql 当我让它查看时,我遇到了处理它的问题 学期它总是返回最大的第 4 学期结果 bt 它错过了最多 2 个学期 gpa 的课程,这里是查询
SELECT DISTINCT A.institution
,A.acad_career
,A.emplid
,a.crse_id
,A.UNT_TAKEN
, a.acad_prog
,first_value(a.grade_points) OVER (PARTITION BY A.emplid
,a.crse_id
ORDER BY a.grade_points DESC) AS GPA
,first_value(a.strm) OVER (PARTITION BY A.emplid
,a.crse_id
ORDER BY a.grade_points DESC) AS strm
FROM ps_qau_maxgp_ugrd a
WHERE acad_career='UGRD'
AND Emplid LIKE '04091313014%'
AND Strm='1313'
ORDER BY A.institution ,A.acad_career ,A.emplid ,A.UNT_TAKEN , a.acad_prog
【问题讨论】:
-
请发布一些示例数据,实际输出和预期输出
-
我不明白。您正在选择员工在不同课程中在一门课程中获得的最高成绩,并将其称为“GPA”?为什么? GPA 具有非常明确的含义,与您的选择不同。在您的代码中的任何地方,我都看不到实际 GPA 的计算位置。除了代码之外,您还应该显示表结构(表名、列名和数据类型以及它们之间的关系)。您在解释要求方面做得很好,因此没有必要重复。然后请展示一小部分输出样本,以便我们知道您需要什么。
-
另外,您在这里显示的似乎是一个中间结果。如果是这样,那没关系,但请向我们展示所需的最终结果。完全有可能不需要这个中间步骤,您可以获得更简单、更快速、更易于编写、阅读和维护的解决方案。
标签: sql oracle peoplesoft