我有两个空间表,sp1有代表房屋的点,pt2有代表公共交通的点。
我想为每栋房子找到最近的公共交通工具。它几乎可以工作,但我似乎无法将公共交通的名称输入到SELECT语句中。
SELECT
sp1.spaddressid,
MIN(ST_Distance(sp1.spgeom,pt2.geom)/1000) As "Distance from address to nearest public transport"
FROM
public."address" sp1,
public."dublin_pubtrans_itm" pt2
GROUP BY sp1.spaddressid
;查询工作正常,但我想要显示最近的公共交通名称(pt2.name)。每当我想把它加进去时,我就会得到:
ERROR: column "pt2.name" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT sp1.spaddressid, pt2.name AS "Name", MIN(ST_Distance(...发布于 2018-12-03 21:50:26
最简单的方法可能是跳过聚合函数use,而是在构造上使用DISTINCT,如下所示的应该为每个地址提供一行,并在同一行上引用最近的公共交通项目:
SELECT DISTINCT ON(sp1.spaddressid) sp1.spaddressid
, (ST_Distance(sp1.spgeom,pt2.geom)/1000) AS "Distance from address to nearest public transport"
, pt2.name AS "nearest public transport name"
FROM public."address" sp1, public."dublin_pubtrans_itm" pt2
ORDER BY sp1.spaddressid
, (ST_Distance(sp1.spgeom,pt2.geom)/1000) ASC;发布于 2018-12-03 21:52:07
您可以使用横向连接:
SELECT sp1.spaddressid, pt2.dist / 1000, pt2.name
FROM public.address AS sp1
CROSS JOIN LATERAL (
SELECT sp1.spgeom <-> pt.geom,
pt.name
FROM public.dublin_pubtrans_itm AS pt
ORDER BY 1
LIMIT 1
) AS pt2;不过不会很快的。
https://stackoverflow.com/questions/53601702
复制相似问题