From: | Mathieu Arnold <mat(at)mat(dot)cc> |
---|---|
To: | pgsql-sql(at)postgresql(dot)org |
Subject: | optimyzing |
Date: | 2002-04-01 17:14:57 |
Message-ID: | 295475750.1017688497@sauron |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Hi
I was wondering if it could be possible to optimise such a query :
select
avg(traffic) AS avg
from
(select
date(time),
sum(traffic) / 1024 / 86400 AS traffic
FROM stats
WHERE ip = '212.43.217.66' AND date(time) < date('now')
GROUP BY date(time)
) AS subselect
having :
Table "stats"
Column | Type | Modifiers
---------+-----------------------------+-----------
ip | inet | not null
time | timestamp without time zone | not null
packet | bigint | not null
traffic | bigint | not null
I have a cron which fills this table every X minute with the total traffic
by ip for this period.
the subselect gives me the average traffic for an IP by day (in KB/s) :
date | traffic
------------+----------------
2002-03-25 | 988.7981688097
2002-03-26 | 961.1585484370
2002-03-27 | 984.3613075426
2002-03-28 | 912.5771145065
2002-03-29 | 885.4281184105
2002-03-30 | 800.6509613489
2002-03-31 | 673.6354859190
and I can't get a query to have the average of that without having to do
this subselect.
avg
----------------
886.6585292820
and if it is useful :
Aggregate (cost=1366.11..1366.11 rows=1 width=16)
-> Subquery Scan subselect (cost=1365.34..1366.07 rows=15 width=16)
-> Aggregate (cost=1365.34..1366.07 rows=15 width=16)
-> Group (cost=1365.34..1365.71 rows=146 width=16)
-> Sort (cost=1365.34..1365.34 rows=146 width=16)
-> Index Scan using stats_ip on stats
(cost=0.00..1360.07 rows=146 width=16)
--
Mathieu Arnold
From | Date | Subject | |
---|---|---|---|
Next Message | Marin Dimitrov | 2002-04-01 17:35:17 | Re: Statistics |
Previous Message | Hunter, Ray | 2002-04-01 16:25:26 | Re: Statistics |