【发布时间】:2016-08-29 01:23:39
【问题描述】:
我在 Postgres(使用 PostGIS)中有一个表,其中有几千行,每行都有统计区域单位的名称(文本)、代码(文本)、城市(文本)和几何(几何) (如县)。几何形状完美镶嵌。
我正在尝试编写一个查询,它将选择满足某些条件的所有行,并将其余行聚合到一行中。对于那一行,我对名称和代码不感兴趣,只对聚合的 geom 感兴趣。例如,像这样:
code | name | geom
------+--------------------+---------
102 | Central Coast | geo...
115 | Sydney - Baulkham | geo...
116 | Sydney - Blacktown | geo...
117 | Sydney - City | geo...
118 | Sydney - Eastern | geo...
000 | Remaining Counties | geo... <---Second SELECT just to get this row
我使用this answer 得出以下结论:
SELECT code, name, ST_Force2D(geom) FROM mytable WHERE mytable.city = 'Greater Sydney' UNION
SELECT
CASE WHEN count(code) > 0 THEN '0' ELSE 'x' END AS code,
CASE WHEN count(name) > 0 THEN 'Rest of Sydney' ELSE 'x' END AS name,
ST_Collect(geom)
FROM mytable WHERE mytable.city <> 'Greater Sydney';
这似乎是一种非常迂回且不清楚的方式来完成非常简单的事情。有没有更好的方法来做到这一点?
【问题讨论】:
标签: sql postgresql postgis