如何使用Vertica AVG [分析]

时间:2019-02-10 15:27:40

标签: sql average vertica

我有一个Vertica表,如下例:

table data example

我想编写SQL查询,该查询计算每个站点的“平均”率,但是shell仅计算其率高于站点平均率的设备。

所以我的查询结果应该是

excpected result

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

该问题的查询内容是什么? 谢谢。

2 个答案:

答案 0 :(得分:2)

我想你想要

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子句中使用窗口函数结果,您需要一个子查询。

答案 1 :(得分:0)

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

WITH avg_part AS (
        SELECT t.*, AVG(t.rate) OVER(PARTITION BY t.site) as avg_rate
        FROM t
)
SELECT site, avg(rate)
FROM avg_part
WHERE rate > avg_rate
GROUP BY site;