2017-03-08 219 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