子查询计算平均距离w / limit

时间:2014-09-16 12:36:33

标签: sql postgresql postgis

我有一个依赖于创建两个中间表的选择过程。我需要帮助重写代码以使用子查询而不是中间表。

我真的不了解子查询,我尝试过的每一个都会返回错误。

此代码提供了我想要的结果,但依赖于创建中间表:

Select modded_vgi_ptsutm.pplx,ST_Distance(modded_vgi_ptsutm.geom,split_polygons.geom) as dist into intermediate from modded_vgi_ptsutm,split_polygons where split_polygons.objectid = 87 order by dist as limit 10;

Select pplx,count(pplx) as count,avg(dist) as dist into intermediate2 from intermediate group by pplx order by dist asc;

Select pplx,dist from intermediate2 where count > 1; 

注意:我将此发布到此处而不是gis页面,因为我认为我的特定问题是比gis更多的sql

2 个答案:

答案 0 :(得分:1)

您应该能够使用子查询来组合这些:

Select pplx, avg(dist) as dist
into intermediate2
from (Select modded_vgi_ptsutm.pplx, ST_Distance(modded_vgi_ptsutm.geom, split_polygons.geom) as dist
      from modded_vgi_ptsutm cross join
           split_polygons
      where split_polygons.objectid = 87
      order by dist
      limit 10
     ) t
group by pplx
having count(pplx) > 1
order by dist;

注意:在from子句中使用逗号是可疑的,因为它会产生笛卡尔积。我用明确的cross join替换了它。

答案 1 :(得分:0)

这应该可以解决问题:

SELECT pplx,dist FROM 
    (
    SELECT pplx,count(pplx) AS count,avg(dist) AS dist FROM 
        (
        SELECT modded_vgi_ptsutm.pplx,ST_Distance(modded_vgi_ptsutm.geom,split_polygons.geom) AS dist FROM 
        modded_vgi_ptsutm,split_polygons where split_polygons.objectid = 87 ORDER BY dist AS LIMIT 10
        ) 
    GROUP BY pplx ORDER BY dist asc
    ) 
WHERE count > 1;
相关问题