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