Postgresql如何更新每列最大值的列?

时间:2017-03-08 16:59:18

标签: sql postgresql postgis

所以我有一个tablea,我需要使用名为buffer

的表来升级列highestprog

如果一个点与2个缓冲区相交,一个点有80个进展,另一个点有90个进展,则该列应该用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来更新整个表中的每一行,而不是每行的正确值。如何使用正确的缓冲区更新正确的值?

1 个答案:

答案 0 :(得分:7)

如果我正确理解你的问题,应该按点计算最大值。假设表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