2017-02-24 3 views
0

下のOracle文では、サブクエリを使用して最終レコードを取得しています。最終結果のネストされたサブクエリ列名の取得/表示

このクエリはうまくいきますが、私はそれをより最適化したいと考えています。ここでは、ネストされたサブクエリ(つまり、3番目のパラ)では、平均、最大、最小を取得しています。どのような結果でも、ネストされたサブクエリ(つまり3番目のパラ)に戻ってきたのですが、再び2番目のパラのクエリでこれらのカラム名を使用しています。同じカラム名(最大、最小)を使用して、結果。最初のクエリ(最初のパラクエリ)で直接カラム名(平均、最大、最小)を使用できるように最適な方法はありますか?

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

私はあなたのコードを編集しましたが、その間に(読んでいる間に)読んで理解しようとしましたが、まだ何が起こるのかわかりません。テーブルが何であるか(テーブル名、カラム名とデータタイプ、問題に関連するテーブルとカラムのみ)と、そこから得ようとしている出力 - 論理とは何か出力が持たなければならない列と、それらが表すもの/計算方法。おそらくそれはたくさんの仕事のように聞こえるかもしれませんが、多分そうですが、あなたは無料のアドバイスを探しています - あなたは仕事のいくつかをしなければなりません。 – mathguy

答えて

0

質問に基づいて、グレードテーブルPKがクラスであり、テーブルにコースが含まれていないと答えます。クエリは基本的に各コースのすべてのクラスを見つけて、クラスごとに最小/最大/平均グレードを計算し、コースごとに計算に使用されます。 - - GRADEテーブルにコース番号が含まれている場合、廃止されたクラスを考慮する必要がない限り、クラステーブルを読み飛ばしても問題ありません。 - HTH - - マーク・D・パウエル -

+0

私はOPからの要求を聞くことを好む。あなたが言うことが正しいと思うなら(私もそう思っていました)、まず、参加は最初に、次に最小/最大/平均(彼らは一度だけ行う必要があります)を行う必要があります。クラスの平均を取ることは、コースのすべての成績の平均を取ることと同じではありません(すべてのクラスが同じ成績を持っているわけではないため)。しかし、私は答えを出すことを望んでいないし、OPの要件が違っていたことを知りたいのです。 – mathguy

0

CLASS_IDとCourse_IDには、主キーと名前がユニークで、このクエリがうまくいくかもしれないしている場合... しかし、あなたはそれらのテーブルで膨大なデータを持っている場合は、このクエリがうまくいくかもしれません遅すぎる..

関連する問題