我有一个Vertica表,如下例:
我想编写SQL查询,该查询计算每个站点的“平均”率,但是shell仅计算其率高于站点平均率的设备。
所以我的查询结果应该是
因为站点1的平均比率是3,所以我们只需要计算4和5,结果是4.5。 由于网站2的平均费率为8,因此我们只需要计算8和9,结果便是8.5。
该问题的查询内容是什么? 谢谢。
答案 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;