0

特定の値に達するまで現在の合計を作成しているこの質問に非常に似たクエリがあります。私の場合、目的の人口に達するまで郡の人口を数えています。

ただし、lng/lat までの距離で検索を並べ替えて、最も近い郡を最初に追加したいと考えています。以下でこのクエリを実行していますが、結果が得られません。代わりに、ORDER BY row_idまたは SPATIALLY で計算されていない列を実行すると、結果が返されます。2 つの句を使用して試してみましWITHたが、まだ結果が得られません。適切に入力されていない可能性があるため、整数としてキャストしようとしましdistanceたが、それは役に立ちませんでした。

このエンドポイントでクエリを実行できるテスト サーバーをセットアップしました http://sqltestmcr.cartodb.com/api/v2/sql?q=<your query statement here>

これは私が試しているクエリです。以下は、機能するバリエーションです。このリンクを使用して、このクエリの結果を確認できます。 http://sqltestmcr.cartodb.com/api/v2/sql?q=SELECT%20*%20FROM%20(%20SELECT%20county,%20the_geom,%20distance,%20row_id_2,%20sum(population)%20over%20(order%20by%20distance%20asc)%20as%20running_total%20FROM%20(%20SELECT%20row_id,%20county,%20population,%20the_geom,%20row_id%20*%202%20AS%20row_id_2,%20ST_Distance(%20ST_Centroid(the_geom),%20ST_GeomFromText('POINT(-72.1235%2042.3521)',%204326)%20)%20AS%20distance%20FROM%20counties_ny_export)%20sq1)%20sq2%20WHERE%20running_total%20%3C=%201400

    SELECT
    *
    FROM (
        SELECT 
        county,
        the_geom,
        distance,
        row_id_2,
        sum(population) over (order by distance asc) as running_total
      FROM (
        SELECT 
        row_id,
        county, 
        population,
        the_geom,
        row_id * 2 AS row_id_2,
        ST_Distance(
          ST_Centroid(the_geom), 
          ST_GeomFromText('POINT(-72.1235 42.3521)', 4326)
        ) AS distance 
        FROM
        counties_ny_export
    ) sq1
    ) sq2   
    where running_total <= 1400

次の 2 つのクエリは、 リンクを設定ORDER BY row_idまたはテストする場所で機能します。 ORDER BY row_id_2row_idhttp://sqltestmcr.cartodb.com/api/v2/sql?q=SELECT%20*%20FROM%20(%20SELECT%20county,%20the_geom,%20distance,%20row_id_2,%20sum(population)%20over%20(order%20by%20row_id%20asc)%20as%20running_total%20FROM%20(%20SELECT%20row_id,%20county,%20population,%20the_geom,%20row_id%20*%202%20AS%20row_id_2,%20ST_Distance(%20ST_Centroid(the_geom),%20ST_GeomFromText('POINT(-72.1235%2042.3521)',%204326)%20)%20AS%20distance%20FROM%20counties_ny_export)%20sq1)%20sq2%20WHERE%20running_total%20%3C=%201400

    SELECT
    *
    FROM (
        SELECT 
        county,
        the_geom,
        distance,
        row_id_2,
        sum(population) over (order by row_id asc) as running_total
      FROM (
        SELECT 
        row_id,
        county, 
        population,
        the_geom,
        row_id * 2 AS row_id_2,
        ST_Distance(
          ST_Centroid(the_geom), 
          ST_GeomFromText('POINT(-72.1235 42.3521)', 4326)
        ) AS distance 
        FROM
        counties_ny_export
    ) sq1
    ) sq2   
    where running_total <= 1400

とのリンクをテストrow_id_2: http://sqltestmcr.cartodb.com/api/v2/sql?q=SELECT%20*%20FROM%20(%20SELECT%20county,%20the_geom,%20distance,%20row_id_2,%20sum(population)%20over%20(order%20by%20row_id_2%20asc)%20as%20running_total%20FROM%20(%20SELECT%20row_id,%20county,%20population,%20the_geom,%20row_id%20*%202%20AS%20row_id_2,%20ST_Distance(%20ST_Centroid(the_geom),%20ST_GeomFromText('POINT(-72.1235%2042.3521)',%204326)%20)%20AS%20distance%20FROM%20counties_ny_export)%20sq1)%20sq2%20WHERE%20running_total%20%3C=%201400

4

1 に答える 1

1

すべてが正常に機能しています。たまたま、クエリ ポイントに最も近い郡の人口が 1700 人であり、現在の合計カットオフを超えています。

現在の合計カットオフを 5000 に上げる ( query ) と、2 つの行が選択されます。

{'fields': {'county': {'type': 'string'},
            'distance': {'type': 'number'},
            'population': {'type': 'number'},
            'row_id_2': {'type': 'number'},
            'running_total': {'type': 'number'}},
 'rows': [{'county': 'Rensselaer',
           'distance': 1.4299124873995,
           'population': 1700,
           'row_id_2': 34,
           'running_total': 1700},
          {'county': 'Columbia',
           'distance': 1.51173290729954,
           'population': 2200,
           'row_id_2': 44,
           'running_total': 3900}],
 'time': 0.002,
 'total_rows': 2}

同様に、1400 未満の郡に最も近い別のクエリ ポイントがある場合は、1 行以上が返されます。

于 2013-09-04T21:50:39.157 に答える