0

多くの冗長ポイントがあるテーブルがあります。(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;

お世話になりました(^_^)

4

1 に答える 1

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

于 2013-03-27T23:22:23.297 に答える