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

Postgresql how to update a column for max values for each row?

所以我有一个 tablea,我需要用来自 table 的值升级 highestprog 列,称为 buffer

如果一个点与 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))

但是,这只是将整个 table 中的每一行更新为 100,而不是每一行的正确值。如何使用正确缓冲区中的正确值进行更新?

如果我对你的问题理解正确的话,每点应该取最大值。假设 table tablea 包含一个 "id column" 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