mysql - 计算postgres/postgis中两个不相关表之间的重叠

标签 mysql sql postgresql postgis psql

这既是一个基本的 SQL 问题,也是一个 postgres/postgis 问题。

我有两个表集,位于同一数据库但来自不同的来源,提供相似但不同的地理数据。

例如第一个集合的查询

select ST_Area(g.geog), g.geog area1 
from 
(--complicated joins on set1 tables---)
order by area1;

给出(仅显示第一列):

1449088812.57385
2209542976.77606
2419594400.94064
2680798195.72685
2921972342.3048
2936036972.01677
3420807650.41126
3426766723.91276
4098062224.01722
5082190891.49144
5137325111.41293
5726948701.13547

第二组查询:

select ST_Area(r.geog), r.geog area2 
from 
(--some other compilcated joins on set2 tables----) 
order by area2;

给出(仅显示第一列):

1449087081.39959
2209560820.96132
2419587161.04685
2680790097.03592
2922282361.4318
2936033639.82268
3420802892.77572
3427452706.69087
4098057825.46861
5082187140.27675
5137291729.45781
5726925279.07641

它们都是 12 行。我想相应地并排比较它们。具体来说,我想使用两个查询结果中的“geog”列来计算重叠几何形状,可能使用 ST_Intersection() 或其他 postgis 方法。 (此处区域仅用于演示目的。)

我该怎么做?我试过了: 行号() 与...作为... 创建临时表... 进入#temp ...

请为我指明正确的方向!

最佳答案

我没有您的完整查询,但根据您提供的结果,您可以执行以下操作:

WITH CTE1 AS
(
    SELECT ROW_NUMBER() OVER(ORDER BY col1) AS ROWNUM, col1 FROM tab1
),
CTE2 AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY col1) AS ROWNUM, col1 FROM tab2
)
SELECT CTE1.col1 AS RES_T1, CTE2.col1 AS RES_T2
FROM CTE1 FULL JOIN CTE2 ON CTE1.ROWNUM = CTE2.ROWNUM

sqlfiddle demo

希望您可以根据您的查询进行调整。

关于mysql - 计算postgres/postgis中两个不相关表之间的重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20533651/

相关文章:

mysql不允许在插入查询中使用转义字符

mysql - 触发: insert a row just inserted

bash - postgres定期自动转储

mysql - 什么ip AWS lambda函数使用?

MySQL 更新另一个表中的所有值

mysql - 结合 bash 和 SQL 脚本来创建 wordpress 站点

php - 有没有办法更新行以添加批处理 ID 并返回该 ID?

from 子句中具有不同表的 SQL 更新语句

sql - 返回列与计数前 2 列匹配的所有行

mysql - 向表中插入数据时出现 SQL 错误