我有两个表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;
查询工作正常,但需要很长时间。还有其他方法可以达到同样的效果吗?
任何输入都会很棒并且提前感谢。
答案 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;