2016-12-23 8 views
0

計算フィールドと空間クエリを使用してデータベースにクエリを実行していますが、サブクエリはありません。しかし、POSTGRESQLは別名の私を求め続けて....POSTGRESQLいいえサブクエリ:FROMのサブクエリにエイリアスが必要です

SELECT geoid as destination, 
    lehd_graph.h_geocode asorigin,lehd_graph.S000 as population, 
    (ST_buffer(ST_Transform(ST_SetSRID(ST_Point(-74.01128768920898, 40.739843698929995), 4326), 3857), 500)))/
ST_area(lehd_map.the_geom_webmercator)) as fraction 
FROM lehd LEFT JOIN lehd_graph 
ON lehd.w_geocode = lehd_graph.w_geocode 
WHERE ST_intersects(lehd_map.the_geom_webmercator, 
ST_buffer(ST_Transform(ST_SetSRID(ST_Point(-74.01128768920898, 40.739843698929995), 4326), 3857), 500)) 

構文エラー:FROMでの副問合せは、あなたがあなたのクエリの問題のカップルを持っている別名

答えて

3

を持っている必要があります。直接のエラーは、ST_Buffer()への最初の呼び出しで括弧の数が一致しないために発生しますが、修正してもクエリは実行されません。実際、最初の呼び出しは半径が500メートル(正確には785398.163平方メートル)の円の面積を不正確に計算する非常に高価な方法です。その呼び出しを取り除き、その領域を接続するだけです。 (関連もはや今は別の問題が、あなたは明らかに不可能であるST_Area()からのスカラー値でgeometryを分割しようとしていたということです。)

更なる問題は、あなたがあなたのテーブルlehd_mapが含まれていなかったということですFROM句;私はここでJOINを使って追加しました。

WITH pt(geom, area) AS (
    VALUES (ST_Buffer(
       ST_Transform(
       ST_SetSRID(
        ST_Point(-74.01128768920898, 40.739843698929995), 4326), 3857), 500), 
      785398.163) -- 500 x 500 x pi: area of the buffer around the point 
) 
SELECT geoid AS destination, 
     lehd_graph.h_geocode AS origin, 
     lehd_graph.S000 AS population, 
     pt.area/ST_Area(lehd_map.the_geom_webmercator) AS fraction 
FROM pt 
JOIN lehd ON true 
LEFT JOIN lehd_graph USING (w_geocode) 
JOIN lehd_map ON ST_Intersects(lehd_map.the_geom_webmercator, pt.geom); 

SELECT geoid AS destination, 
     lehd_graph.h_geocode AS origin, 
     lehd_graph.S000 AS population, 
     785398.163/ST_Area(lehd_map.the_geom_webmercator)) AS fraction 
FROM lehd 
LEFT JOIN lehd_graph USING (w_geocode) 
JOIN lehd_map ON ST_Intersects(lehd_map.the_geom_webmercator, 
        ST_Buffer(
        ST_Transform(
         ST_SetSRID(
         ST_Point(-74.01128768920898, 40.739843698929995), 
         4326), 
         3857), 
        500) 
        ); 

あなたがポイントのバッファとバッファのエリアを分離不安を感じる場合は、面積がバッファリングポイントとどのように関連するかを強調するために、CTEでそれらを組み合わせることができ

+0

私はPostgresのジオコードAPIについてよく分かりませんが、この種の答えを出すには十分ですが、正しい軌跡になります! –

関連する問題