関連するクエリは、時々フィルターを生産する場合有するのは、変換方法を見てみましょう。
1.データの準備
DROPテーブル学生。
TABLE学生のCREATE
(StuName VARCHAR2(10)NOT NULL、
SClass VARCHAR2(10)、
被験者VARCHAR2(10)、
チームVARCHAR2(10)、
)INTEGERスコア。
スチューデント値への挿入( 'A1'、 '1'、 '数学'、 'A'、60);
;スチューデント値( 'A2'、 '1'、 '数学'、 'B'、90)への挿入
スチューデント値への挿入( 'A3'、 '1'、 '英語'、 'A'、80);
;スチューデント値( 'A4'、 '1'、 '英語'、 'B'、40)への挿入
学生値( 'A5'、 '2'、 '数学'、 'A'、60)への挿入。
;スチューデント値( 'A6'、 '2'、 '数学'、 'B'、60)への挿入
スチューデント値に挿入( 'A7'、 '2'、 '英語'、 'B'、80);
スチューデント値に挿入( 'A8'、 '2'、 '英語'、 'B'、100);
コミット;
2.検索要求
対象はすべてのチーム平均クラス名の平均値よりも大きい場合、各クラスを取得し、アカウント名、平均アカウント
すなわち、図中の黄色のマークされた部分。
3.SQLの最適化
s.SClass、s.Subject、AVG(s.Score)を選択
学生のから
s.SClass、s.Subjectによってグループ
平均を有する(s.score)
>すべての(選択AVG(s1.Score)
学生S1から
どこs.SClass = s1.SClass
s1.Teamによって基);
ゴーンフィルタフィルタの接続部を有します。
tmpのようで
(s.SClassを選択し、
s.Subject、
avg_Subjectとして平均(s.Score)上(s.SClass、s.Subjectによってパーティション)
avg_Teamとして平均(s.score)上(s.SClass、s.Teamによってパーティション)
学生秒から)
明確なt.SClass、t.Subject、t.avg_Subjectを選択
TMPトンから
存在する(選択していないところ1
TMP t2から
どこt.SClass = t2.SClass
そしてt.avg_Subject <= t2.avg_Team)。
お問い合わせは、ハッシュ接続を歩いた後、クエリを開始しました。
集計操作が大幅にデータの量を減らすことができればここで、それはを続行しないことをお勧めします。具体的には検証されません。