Postgress SQL 9.x上邮政编码之间的Postgis ST_距离

Postgress SQL 9.x上邮政编码之间的Postgis ST_距离,sql,postgresql,postgis,Sql,Postgresql,Postgis,这更像是一个SQL问题,而不是PostGIS问题,但我又被卡住了:( 我有一个名为referenced的表,在“from”和“to”列中有id号。 我想根据邮政编码计算所有这些身份证号码之间的距离 有一个称为doc的单独参考表,其中包含“NPI”列中的id号和“提供商业务邮寄地址邮政编码”列中的邮政编码,还有一个称为zctas的单独地理表,其邮政编码列为zcta和geom列 例如,此查询工作正常: SELECT z.zcta As zip1, z2.zcta As zip2,

这更像是一个SQL问题,而不是PostGIS问题,但我又被卡住了:(

我有一个名为referenced的表,在“from”和“to”列中有id号。 我想根据邮政编码计算所有这些身份证号码之间的距离

有一个称为doc的单独参考表,其中包含“NPI”列中的id号和“提供商业务邮寄地址邮政编码”列中的邮政编码,还有一个称为zctas的单独地理表,其邮政编码列为zcta和geom列

例如,此查询工作正常:

SELECT z.zcta As zip1, 
       z2.zcta As zip2, 
       ST_Distance(z.geom,z2.geom) As thedistance 
  FROM zctas z, 
       zctas z2 
 WHERE z2.zcta = '60611' 
       AND z.zcta='19611';
一个问题是“提供商业务邮寄地址邮政编码”应该=左(“提供商业务邮寄地址邮政编码”,5)

在这一个查询中,我一直在连接引用表中的2个邮政编码

样本表:

参考表:

    from    |     to     | count 
------------+------------+-------
 1174589766 | 1538109665 |   108
 1285653204 | 1982604013 |    31
期望输出:

    from    |     to     | count | distance
------------+------------+----------------
 1174589766 | 1538109665 |   108 | 53434
 1285653204 | 1982604013 |    31 | 34234
\d+


谢谢!!!!

这应该是相对简单的

假设NPI在
doc
referenced
中实际上都是相同的长度,您可以非常轻松地连接这些表:

SELECT ad."Provider Business Mailing Address Postal Code" as a_zip,
       bd."Provider Business Mailing Address Postal Code" as b_zip,
       r."count"
  FROM referred r
           LEFT JOIN doc ad ON r."from" = ad."NPI"
           LEFT JOIN doc bd ON r."from" = bd."NPI";
显然,在仔细分析数据中的
NPI
from
/
to
字段的基础上调整此联接。如果需要,在联接中添加
trim
left
方法调用-最重要的是
联接
条件是基于可比较的数据

现在,从这个查询到原始查询查找距离是很简单的:

SELECT ad."Provider Business Mailing Address Postal Code" as a_zip,
       bd."Provider Business Mailing Address Postal Code" as b_zip,
       r."count",
       ST_Distance(az.geom,bz.geom) As thedistance
  FROM referred r
           LEFT JOIN doc ad ON r."from" = ad."NPI"
           LEFT JOIN doc bd ON r."from" = bd."NPI"
           LEFT JOIN zctas az 
               ON az.zcta = left(ad."Provider Business Mailing Address Postal Code",5)
           LEFT JOIN zctas bz
               ON bz.zcta = left(bd."Provider Business Mailing Address Postal Code",5)
这只是一种结构,其他许多结构都是可行的。这种特殊的结构将确保
引用的
中的每个条目都被表示出来,即使
NPI
doc
表中的条目不匹配,或者zipcode无法与
zctas
表匹配

另一方面,如果
doc
表中的
NPI
存在多个条目,则提及此重复
NPI
的任何
引用的
条目也将被复制

类似地,如果一个特定邮政编码(
zcta
)的
zcta
中有多个条目,您将看到重复的
参考行


这就是
左连接的工作原理,但我认为值得在警告中加上它,因为提供商数据通常都是NPI的重复数据,而且在邮政编码查找列表中经常会有重复的邮政编码,因为一些邮政编码跨州线。

提供了一个表定义。我不确定你的意思。你想要整个方案吗所有表格中的一个?谢谢。每个表格都收到了。谢谢。上面编辑了。从
的ID与其他内容有什么关系?
SELECT ad."Provider Business Mailing Address Postal Code" as a_zip,
       bd."Provider Business Mailing Address Postal Code" as b_zip,
       r."count",
       ST_Distance(az.geom,bz.geom) As thedistance
  FROM referred r
           LEFT JOIN doc ad ON r."from" = ad."NPI"
           LEFT JOIN doc bd ON r."from" = bd."NPI"
           LEFT JOIN zctas az 
               ON az.zcta = left(ad."Provider Business Mailing Address Postal Code",5)
           LEFT JOIN zctas bz
               ON bz.zcta = left(bd."Provider Business Mailing Address Postal Code",5)