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
所以我有一个 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