Sql 如何使用Vertica AVG[分析]

Sql 如何使用Vertica AVG[分析],sql,average,vertica,Sql,Average,Vertica,我有一个Vertica表,如以下示例所示: 我想编写SQL查询,它计算每个站点的平均速率,但shell只计算速率高于站点平均速率的设备 所以我的查询结果应该是 由于站点1的平均速率为3,因此我们只需计算4和5,结果为4.5。 因为站点2的平均速率是8,所以我们只需要计算8和9,结果是8.5 这个问题的疑问是什么? 谢谢。我想你想要: select site, avg(rate) from (select t.*, avg(t.rate) over (partition by t.site) as

我有一个Vertica表,如以下示例所示:

我想编写SQL查询,它计算每个站点的平均速率,但shell只计算速率高于站点平均速率的设备

所以我的查询结果应该是

由于站点1的平均速率为3,因此我们只需计算4和5,结果为4.5。 因为站点2的平均速率是8,所以我们只需要计算8和9,结果是8.5

这个问题的疑问是什么? 谢谢。

我想你想要:

select site, avg(rate)
from (select t.*, avg(t.rate) over (partition by t.site) as avg_rate
      from t
     ) t
where rate > avg_rate
group by site;
要在where子句中使用窗口函数结果,您需要一个子查询。

我想您需要:

select site, avg(rate)
from (select t.*, avg(t.rate) over (partition by t.site) as avg_rate
      from t
     ) t
where rate > avg_rate
group by site;

要在where子句中使用窗口函数结果,需要一个子查询。

Gordon的答案完全正确。为了彻底起见。编写查询的另一种方法是使用with子句

以avg_零件为例 选择t.*,按t.site的平均超额费率作为平均费率 从t 选择站点,然后单击avgrate 来自avg_部分 其中速率>平均速率 按地点分组;
戈登的回答完全正确。为了彻底起见。编写查询的另一种方法是使用with子句

以avg_零件为例 选择t.*,按t.site的平均超额费率作为平均费率 从t 选择站点,然后单击avgrate 来自avg_部分 其中速率>平均速率 按地点分组;