聚合不提供我期望的信息并按重复记录分组
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_Contains
、ST_Intersects
、ST_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)
我正在创建一个来自两个 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_Contains
、ST_Intersects
、ST_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)