0

同じ構造と列名を持つ 2 つのテーブル STAT1 と STAT2 があります。STAT1 を使用して最新の CSV ファイルをロードし、残りは STAT2 にロードします。データベースは統計専用です。ここで重要な列は、関数、値、およびユーザー名です。問題が発生したときにユーザーが使用したすべての機能の平均応答時間を取得し、それを前の週の平均応答時間と比較しています。クエリは次のとおりです。

select a.functions,    
       avg(a.value), 
       avg(b.value)
  from STAT1 a, 
       STAT2 partition (p9) b
 where a.functions = b.functions
   and a.username = '<USERNAME>'
 group by a.functions
 order by a.functions desc;

クエリは正常に機能しますが、時間がかかります。同じ結果を達成する他の方法はありますか?

どんな入力でも素晴らしいでしょう、そして前もって感謝します。

4

1 に答える 1

0

結合によって平均が歪む可能性があるため、現在の統計セットとは別に平均関数値を計算する必要があります。(データを見なくても、どちらのテーブルからでも 1 行以上繰り返すことができると思います。)

次のようなことを検討してください。

select a.functions,    
       avg(a.value), 
       (select avg(b.value) 
          from STAT2 partition (p9) b 
         where b.functions = a.functions
       ) as overall_fn_avg
  from STAT1 a
 where a.username = '<USERNAME>'
 group by a.functions
 order by a.functions desc;

また

select a.functions,    
       avg(a.value), 
       max(b.overall_fn_avg)
  from STAT1 a
       inner join
       (select s2.functions,
               avg(s2.value) as overall_fn_avg 
          from STAT2 partition (p9) s2 
         group by functions
       ) b
         on b.functions = a.functions
 where a.username = '<USERNAME>'
 group by a.functions
 order by a.functions desc;
于 2013-09-10T18:29:49.103 に答える