首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可以选择与点表最近的点,但我也需要点名

可以选择与点表最近的点,但我也需要点名
EN

Stack Overflow用户
提问于 2018-12-03 20:52:09
回答 2查看 61关注 0票数 1

我有两个空间表,sp1有代表房屋的点,pt2有代表公共交通的点。

我想为每栋房子找到最近的公共交通工具。它几乎可以工作,但我似乎无法将公共交通的名称输入到SELECT语句中。

代码语言:javascript
运行
复制
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)。每当我想把它加进去时,我就会得到:

代码语言:javascript
运行
复制
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(...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-03 21:50:26

最简单的方法可能是跳过聚合函数use,而是在构造上使用DISTINCT,如下所示的应该为每个地址提供一行,并在同一行上引用最近的公共交通项目:

代码语言:javascript
运行
复制
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;
票数 3
EN

Stack Overflow用户

发布于 2018-12-03 21:52:07

您可以使用横向连接:

代码语言:javascript
运行
复制
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;

不过不会很快的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53601702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档