[英]How to calculate actual average of a column whose column values need to be > than 25% of average in postgresql
我在PostgreSQL 9.2表中有100萬行的一年數據,而我正努力計算一種用於網絡統計的度量。
I have a table with columns date , devicename , traffic_rate
我需要找到不包括節假日的平均traffic_rate。 如果traffic_rate is < 25% of average(traffic_rate)
則將一天視為假日。同樣,我需要通過排除假日來求和traffic_rate並求出實際平均值。 例如:
date devicename traffic_rate
day1 gateway1 45.3
day2 gateway1 1
day3 gateway1 28.2
day4 gateway1 4.56
包括holidays = (45.3+1+28.2+4.56)/4 = 19.76
在內的平均值holidays = (45.3+1+28.2+4.56)/4 = 19.76
當traffic_rate < 25 % of 19.76 will be treated as holiday --> Here day2,day4
天traffic_rate < 25 % of 19.76 will be treated as holiday --> Here day2,day4
被視為假期
不含holidays = (45.3+28.2)/2 = 36.75
原始流量率holidays = (45.3+28.2)/2 = 36.75
如何在Postgresql查詢中實現呢?
任何幫助將是非常可貴的
嘗試這個:
SELECT
AVG(traffic_rate)
FROM traffic_tbl
WHERE traffic_rate > (SELECT 0.25 * AVG(traffic_rate) FROM traffic_tbl)
這是另一種方法:
SELECT
AVG(traffic_rate)
FROM
(
SELECT
traffic_rate,
AVG(traffic_rate) OVER () AS avg_traffic_rate
FROM atable
) AS s
WHERE traffic_rate < 0.25 * avg_traffic_rate
;
此解決方案使用窗口聚合 (帶有OVER
子句的AVG
)。 該s
派生表包含個別traffic_rate
值連同關閉整個表中計算出的平均值。 然后,主要查詢將使用平均值根據需求過濾掉行,並根據剩余值計算最終平均值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.