我正在尝试计算在表1的每个多边形中找到的点数(存储在table2中)。查询有效,但我尝试更改它以将生成的值添加到表1中的空白列。
到目前为止,它只能通过将结果附加到表格底部来实现。有帮助吗?总结一下,我正在尝试将从此查询生成的值添加到table1中并将其添加到table1中。目前,查询将它们插入表1中的空白列,但没有与ID匹配,而是附加在底部。
INSERT INTO table1(field3)
SELECT COUNT(table2.id) AS count1
FROM table1 LEFT JOIN table2
ON ST_Contains(table1.geom,table2.geom)
GROUP BY table1.id;
答案 0 :(得分:0)
我在这里做的唯一改变是将左连接切换到内连接。在table1中的几何不包含table2中的几何的情况下,field3的值将保持为null,因此您可能希望首先执行“update table1 set field3 = 0”first (它可能会变成根据您拥有的特征数量和每个几何体有多少个点,可以分两步更快地执行此操作。
update table1 a
set field3 = b.count1
from
(
SELECT table1.id,
COUNT(table2.id) AS count1
FROM table1
JOIN table2
ON ST_Contains(table1.geom,table2.geom)
GROUP BY table1.id
) b
where a.id = b.id
替代:
update table1 a
set field3 = b.count1
from
(
SELECT table1.id,
COUNT(table2.id) AS count1
FROM table1
left JOIN table2
ON ST_Contains(table1.geom,table2.geom)
GROUP BY table1.id
) b
where a.id = b.id
此外,this site今天早上刚出现在reddit上。我没有花太多时间深入研究它,但它看起来很有希望作为(另一种)学习sql的资源(在postgres特定的环境中)。
编辑:我开始怀疑自己关于我第一次发布的两步方法 - 我认为这几乎完全是错误的,所以我提供了一个替代查询。