聚合不提供我期望的信息并按重复记录分组

aggregate doesn't provide information I expect and group by duplicate records

我正在创建一个来自两个 tables 的物化视图。

CREATE MATERIALIZED VIEW poly_mv AS (
   SELECT p.id,
          p.name,
          p.code,
          p.descrip,
          p.geom,
          string_agg(distinct t.id::text, ',') as boundary_1_id,
          string_agg(distinct t.boundary_2, ',') as boundary_2, 
    string_agg(distinct t.country, ',') as country      
   FROM boundary p,
        territories t
   GROUP BY p.id,
            p.name,
            p.code,
            p.descrip,
            p.geom
);

但它会导致所有值的每一行的累积,即对于国家/地区,所有行都有 England, Wales 而不是英格兰或威尔士,具体取决于边界中发生的每个多边形 table 其中每一行都有英格兰或威尔士。

如果我向 group by 添加一条 t.country 行,它会根据国家/地区显示值,但会复制多边形并为威尔士创建一行,为英格兰创建另一行。

如何才能正确获取每个多边形的国家信息?

您问题中的查询在没有任何条件的情况下连接两个表(交叉连接)。为了在空间上连接两个表,您必须首先确定它们之间的关系并选择最佳操作,例如ST_ContainsST_IntersectsST_Touches 等等……列表很长。确定空间操作后,将其添加到JOIN中即可,例如..

SELECT * FROM t1
JOIN t2 ON ST_Contains(t1.geom,t2.geom)

或在WHERE子句中

SELECT * FROM t1,t2
WHERE ST_Contains(t1.geom,t2.geom)