其他编写此查询的方法

时间:2013-09-10 17:41:20

标签: sql oracle11g

我有两个表STAT1和STAT2具有相同的结构和列名。我使用STAT1加载最新的CSV文件,其余的加载到STAT2。数据库仅用于统计,此处重要的列是:function,value和username。我得到了用户在出现问题时使用的每个函数的平均响应时间,并将其与前一周的平均响应时间进行比较。 这是查询:

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;

查询工作正常,但需要很长时间。还有其他方法可以达到同样的效果吗?

任何输入都会很棒并且提前感谢。

1 个答案:

答案 0 :(得分: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;