在最终结果中获取/显示嵌套的子查询列名称

时间:2017-02-24 18:48:38

标签: oracle

在下面的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;

2 个答案:

答案 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