2017-03-08 220 views
0

所以我有一個桌面,我需要升級列表highestprog與表中的值緩衝區Postgresql如何更新每列最大值的列?

如果一個點與2個緩衝區相交,一個有80個進程,另一個有90個進程,應更新列90.

所以我認爲應該在這裏使用最大運算符。我的查詢語句如下:

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