2017-03-08 12 views
0

は、だから、私は、バッファPostgresql各行の最大値の列を更新する方法は?

ポイントが2つのバッファ、80進行に1と90の進行と相互に交差する場合、列がで更新されなければならないというテーブルから値を持つ列highestprogをアップグレードする必要がTABLEAを持っていますa 90.

ここでは、max演算子をここで使用する必要があると考えました。

UPDATE test.tablea 

SET highestprog = (SELECT max(b.progression) FROM test.tablea a, test.buffer b WHERE ST_Contains(b.geom, a.geom)) 

しかし、これは単に100と、テーブル全体にすべての単一の行を更新し、代わりに各列の正しい値:次のように私のクエリがありました。正しいバッファーから正しい値で更新するには?

答えて

2

私があなたの質問を正しく理解している場合は、ポイントごとに最大値を取る必要があります。表tableaに「ID列」idxが含まれていると仮定すると、次のように処理されます。

WITH stat AS (
    SELECT a.idx, MAX(b.progression) AS maxprog 
    FROM 
    test.tablea a, test.buffer b 
    WHERE ST_Contains(b.geom, a.geom) 
    GROUP BY a.idx 
) 
UPDATE test.tablea 
SET highestprog = stat.maxprog 
FROM stat 
WHERE test.tablea.idx = stat.idx 
関連する問題