如何使用PostGIS选择最近的X个位置的平均价格?

问题描述 投票:0回答:1

我想找到任何给定房屋的平均汽油价格。这是我目前的表格。

home_id  | geocoordinates
1        | 0101000020E61000005BB6D617097544
2        | 0101000020E61000005BB6D617097545
3        | 0101000020E61000005BB6D617097546
4        | 0101000020E61000005BB6D617097547
5        | 0101000020E61000005BB6D617097548

gas_price   |   geocoordinates
1           |   0101000020E61000005BB6D617097544
1           |   0101000020E61000005BB6D617097545
1           |   0101000020E61000005BB6D617097546
2           |   0101000020E61000005BB6D617097547
2           |   0101000020E61000005BB6D617097548
2           |   0101000020E61000005BB6D617097544
2           |   0101000020E61000005BB6D617097545
3           |   0101000020E61000005BB6D617097546
3           |   0101000020E61000005BB6D617097547
3           |   0101000020E61000005BB6D617097548
3           |   0101000020E61000005BB6D617097544
4           |   0101000020E61000005BB6D617097545
4           |   0101000020E61000005BB6D617097546
4           |   0101000020E61000005BB6D617097547

[对于每个房屋,我想找到X个最接近gas_prices的平均汽油价格。如果X = 5,则为示例:

home_id     |   average_of_closest_five_gas_prices
1           |   1.5
2           |   2.5
3           |   2.1
4           |   1.5
5           |   1.5

我想出了使用一个单独的home_id的方法,但是我正在努力弄清楚如何全部使用它。

select avg(gas_price) from (
                               SELECT *
                               FROM gas_price
                               ORDER BY gas_price.geocoordinates <-> '0101000020E61000005BB6D617097544'
                               LIMIT 5
                           ) as table_a
postgresql postgis
1个回答
0
投票

您可以使用lateral join来限制group by中组的大小。

select home_id, avg(gas_price)
  from home,
    lateral (
      select gas_price
        from gas_price
        order by gas_price.geocoordinates <-> home.geocoordinates
        limit 5
    ) x
  group by home_id;
© www.soinside.com 2019 - 2024. All rights reserved.