AVG没有给出正确的值 - Postgresql

时间:2013-03-23 12:40:15

标签: average

我有一个表中有许多冗余点,我想使用(distinct)选择不同的点并选择某些行的平均值(例如rscp)。 这里有一个例子:

| id |  point                   |   rscp    |   ci
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| 1  |  POINT(10.1192 36.8018)  |   10      |   701
| 2  |  POINT(10.1192 36.8018)  |   11      |   701
| 3  |  POINT(10.1192 36.8018)  |   12      |   701
| 4  |  POINT(10.4195 36.0017)  |   30      |   701
| 5  |  POINT(10.4195 36.0017)  |   44      |   701
| 6  |  POINT(10.4195 36.0017)  |   55      |   701
| 7  |  POINT(10.9197 36.3014)  |   20      |   701
| 8  |  POINT(10.9197 36.3014)  |   22      |   701
| 9  |  POINT(10.9197 36.3014)  |   25      |   701

我想得到的是下表:( rscp_avg是冗余点的rscp的平均值)

| id |  point                   |   rscp_avg    |   ci
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| *  |  POINT(10.1192 36.8018)  |   11          |   *
| *  |  POINT(10.4195 36.0017)  |   43          |   *
| *  |  POINT(10.9197 36.3014)  |   22.33       |   *

我试过这个,但它给了我一个错误的平均值!!!!

select distinct on(point)
id,st_astext(point),avg(rscp) as rscp_avg,ci
from mesures
group by id,point,ci;

感谢您的帮助(^ _ ^)

1 个答案:

答案 0 :(得分:0)

哈姆杜拉!感谢上帝 !

我刚才找到解决方案:

select on distinct(point)
id,st_astext(point),rscp_avg,ci
from
(select id,point,avg(rscp) over w as rscp_avg,ci
from mesures
window w as (partition by point order by id desc)
) ss
order by point,id asc;

帮助我的网站是:

http://www.postgresql.org/docs/9.1/static/tutorial-window.html

http://www.w3resource.com/PostgreSQL/postgresql-avg-function.php