所以我有一个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来更新整个表中的每一行,而不是每行的正确值。如何使用正确的缓冲区更新正确的值?
答案 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