在下面的Oracle语句中,我使用子查询来获取我的最终记录。
此查询工作正常,但我想让它更优化。在这里,在嵌套的子查询(即第三段)中,我获得了avg,max和min。无论我在嵌套子查询中得到什么结果(即第三段)再次,我在第二个para查询中使用这些列名称,再次,我在第一个para查询中使用相同的列名称(avg,max和min)来显示我的最终结果。是否有任何最佳方式,以便我可以在第一个查询(第一个para查询)中直接使用列名(avg,max和min)。
select suq1.class_id, course.name, suq1.max_score, suq1.min_score, suq1.avg_score
from course,
(select class.course_id as course_id, subq.class_id as class_id,
subq.maximum_score as max_score, subq.minimum_score as min_score,
subq.Average_Score as avg_score
from
(select class_id, max(score) as maximum_score, min(score) as minimum_score,
avg(score) as Average_Score from grade group by class_id) subq,
class where subq.class_id=class.class_id) suq1
where suq1.course_id=course.course_id;
答案 0 :(得分:0)
我会说答案是否定的,因为根据查询,成绩表PK是类,表不包括课程。查询的作用基本上是针对每个课程找到所有课程,然后计算每个课程的最小/最大/ agv成绩,然后根据课程计算得出。 - - 如果GRADE表包含课程编号,您可以跳过阅读课程表,只要您不需要考虑已停止的课程,而上述查询不会。 - - HTH - Mark D Powell -
答案 1 :(得分:0)
如果class_id和course_id是主键且名称是唯一的,则此查询可能有效.. 但是,如果这些表中有大量数据,则此查询可能运行得太慢..
SELECT B.CLASS_ID, C.NAME, MAX(B.SCORE), MIN(B.SCORE), AVG(B.SCORE)
FROM CLASS A, GRADE B, COURSE C
WHERE A.CLASS_ID = B.CLASS_ID
AND A.COURSE_ID = C.COURSE_ID
GROUP BY B.CLASS_ID, C.NAME